3 つのテーブルを持つ DB があります: classes
、teacher
およびtaught
:
クラス
- ID (クラス番号)
- タイトル (クラスタイプ)
- コスト (クラスコスト)
教師
- ユニークな整数 (教師番号)
教えた
- classNum (外部キー)
- teacherNum (外部キー)
- 日付フィールド (classdate)
2015年8月6日以降に開講された一意のクラスのリストを最も高価なものから最も安価なものまで並べ替えて返すSQLクエリを作成する必要があります。
これには distinct を使用しますか? すべての一意の結果を取得するため、または外部キーを活用するため。
これは機能しますか?
答え1
はい、次のようなものです:
SELECT DISTINCT *
FROM classes
WHERE ID IN
(SELECT classNum FROM taught WHERE date = CONVERT(...,Aug 6 2015 ))
ORDER BY cost ASC
答え2
私は次の構造を使用しました...
CAST(FLOOR(CAST(@date as FLOAT)) を DateTime としてキャストします);
これは、日付を浮動小数点数に変換し、浮動小数点数の小数点数である「時間」部分を切り捨てることで、日付から時間を削除します。
見た目は少し不格好ですが、1 日を通して繰り返し使用する大規模なデータセット (約 100,000 行) ではうまく機能します。