我想在表格中找到两个字段的唯一组合的最新条目。
Employee_Number | Cap_Id | Score | Date_Added
我想找到最新的' Date_Added'对于一组Employee_Number和Cap_Id,还要显示'分数'输入该组。我可以按Employee_Number和Cap_Id分组以获得我想要的结果,但我也不能将分数显示为分组依据将其确定为不同的值。
如果我的表格如下:
Employee_Number Cap_Id Score Date_Added
96149 2 4 04/06/2015
96149 2 3 03/06/2015
我希望结果是:
Employee_Number Cap_Id Score Date_Added
96149 2 4 04/06/2015
我可以使用:
SELECT Employee_Number, Cap_Id, MAX(Date_Added)
FROM Scores
GROUP BY Employee_Number, Cap_Id
要获得正确的结果,但我也需要得分
答案 0 :(得分:4)
略过GROUP BY
,如果没有其他行具有相同的Employee_Number
和Cap_Id
,但是存在更晚的日期,则返回一行!
SELECT Employee_Number, Cap_Id, Score, Date_Added
FROM Scores s1
WHERE NOT EXISTS (select 1 from Scores s2
where s1.Employee_Number = s2.Employee_Number
and s1.Cap_Id = s2.Cap_Id
and s1.Date_Added < s2.Date_Added)
如果有平局,它会返回两行!
编辑 - 某种解释:
子查询查找具有相同Employee_Number
和Cap_Id
的另一行,但后来的Date_Added
值。
如果不存在这样的行,则返回主选择中的行。
在子选择中选择的内容并不重要,重要的是行exists
或not exists
。 (那是select 1
。你可以在子查询中选择任何内容,如果无关紧要。)
答案 1 :(得分:4)
我认为您不需要分组。
SELECT Employee_Number, Cap_Id, Score, Date_Added
FROM Scores AS s1
WHERE Date_Added = (SELECT MAX(Date_Added) FROM Scores s2 where s1.Employee_Number = s2.Employee_Number)
如果Access不允许您在where子句中使用 max(),也可以尝试此操作。
empty