У меня есть БД с 3 таблицами: classes
, teacher
и taught
:
классы
- ID (номер_класса)
- название (классыТип)
- стоимость (classesCost)
учитель
- уникальный int (teacherNum)
учил
- classNum (внешний ключ)
- teacherNum (внешний ключ)
- поле даты (classdate)
Мне нужно написать запрос на SQL, который вернет список уникальных классов, которые преподавались с 6 августа 2015 года, отсортированный от самых дорогих к самым недорогим.
Буду ли я использовать 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)) as DateTime);
это удаляет время из даты, преобразуя ее в число с плавающей точкой и усекая часть «время», которая является десятичной частью числа с плавающей точкой.
Выглядит немного неуклюже, но отлично работает с большим набором данных (~100 000 строк), который я использую неоднократно в течение дня.