SELECT * FROM ScoresTable WHERE Score =
(SELECT MAX(Score) FROM ScoresTable AS st WHERE st.Date = ScoresTable.Date)
Есть ли имя для описания с использованием инструкции SELECT в предложении WHERE? Это хорошая/плохая практика?Использование инструкции SELECT в предложении WHERE
Будет ли это лучшей альтернативой?
SELECT ScoresTable.*
FROM ScoresTable INNER JOIN
(SELECT Date, MAX(Score) AS MaxScore
FROM ScoresTable GROUP BY Date) SubQuery
ON ScoresTable.Date = SubQuery.Date
AND ScoresTable.Score = SubQuery.MaxScore
Это гораздо менее изящный, но, похоже, работает быстрее, чем моя предыдущая версия. Мне это не нравится, потому что он не отображается очень четко в графическом интерфейсе (и его нужно понимать начинающим SQL). Я мог бы разбить его на два отдельных запроса, но затем все начинает забиваться ...
N.B. Мне нужно больше, чем просто дата и оценка (например, имя)
Посмотрите на функции оконной обработки http://www.sqlbooks.ru/readarticle.aspx?part=02&file=sql200523 –
вы предполагаете, что его база данных реализует это. Кроме того, функции окна почти наверняка не требуются здесь для удовлетворения потребностей Джо. – BonyT
Действительно, они не требуются для этого простого примера, но они предлагают элегантные решения для более сложных вариантов этих типов запросов, поэтому их стоит знать. –