SELECT * FROM ScoresTable WHERE Score =
(SELECT MAX(Score) FROM ScoresTable AS st WHERE st.Date = ScoresTable.Date)
Run Code Online (Sandbox Code Playgroud)
在WHERE子句中是否有使用SELECT语句描述的名称?这是好/坏的做法吗?
这会是一个更好的选择吗?
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
Run Code Online (Sandbox Code Playgroud)
它不那么优雅,但似乎比我以前的版本运行得更快.我不喜欢它,因为它在GUI中没有很清楚地显示(并且需要SQL初学者理解).我可以将它分成两个单独的查询,但随后事情开始变得混乱......
NB我需要的不仅仅是日期和分数(例如姓名)
我有一个MS Access数据库,其中包含一个日期,分数和这些分数所关联的人的表格,例如
Date Score Name 1/6/11 5 Dave 1/6/11 10 Sarah 2/6/11 4 Dave 2/6/11 3 Graham 3/6/11 1 Dan 4/6/11 11 Dan 4/6/11 9 Graham
我想写一个查询来查找谁在每个日期获得最高社交,即结果:
Date Score Name 1/6/11 10 Sarah 2/6/11 4 Dave 3/6/11 1 Dan 4/6/11 11 Dan
我可以想到这个问题的两个解决方案(我愿意接受其他建议),如下所示:
1)编写查询以查找每个日期的最低分数,然后写入将第一个查询加入原始表的第二个查询.即:
查询1:
SELECT Date, MAX(Score) AS MaxScore FROM ScoresTable GROUP BY Date
Run Code Online (Sandbox Code Playgroud)
QUERY2:
SELECT ScoresTable.*
FROM ScoresTable INNER JOIN Query1
ON ScoresTable.Date = Query1.Date
AND ScoresTable.Score = Query1.MaxScore
Run Code Online (Sandbox Code Playgroud)
[这些可以合并为一个查询:
SELECT ScoresTable.*
FROM ScoresTable INNER JOIN
(SELECT Date, …Run Code Online (Sandbox Code Playgroud)