SQL:如何从返回的多个记录中选择最高PK

时间:2010-01-26 20:26:47

标签: sql sql-server distinct

我有一个Journal_Entry表,主键为Journal_Entry_ID,(以及其他列)是一个Entry_Date列。

我正在尝试通过SELECT MAX(Entry_Date)进行选择最近的Entry_Date的查询 - 但问题是用户可能在给定日期记录了多个条目。因此,如果用户今天两次记录日记条目,则此SELECT语句可能会返回多行,因为已多次记录相同的MAX Entry_Date。

所以我想做的是,如果SELECT MAX语句返回多条记录,请选择具有最高返回值的Journal_Entry_ID的记录。

现在我的查询如下:

SELECT Journal_Entry_ID, Entry_Date
FROM Journal_Entry
WHERE Entry_Date = (SELECT MAX(Entry_Date) FROM Journal_Entry);

我正在使用SQL SERVER。任何帮助将不胜感激。

感谢。

编辑:我正在使用SQL SERVER。不像我最初报道的那样是我的SQL。

3 个答案:

答案 0 :(得分:4)

假设Entry_Date是一个日期/时间,这样的工作会不会这样?

select top 1 Journal_Entry_ID
from JournalEntry
order by Journal_Entry_ID desc, Entry_Date desc

如果Entry_Date只是一个Date字段(没有时间),则Journal_Entry_ID是一个自动递增的数字字段吗?如果是这样,那么可能是这样的:

select top 1 Journal_Entry_ID
from  JournalEntry
where Entry_Date = (select max(Entry_Date) from JournalEntry)
order by Journal_Entry_ID desc

答案 1 :(得分:1)

SELECT TOP 1
       Journal_Entry_ID, Entry_Date
FROM Journal_Entry
ORDER BY Entry_Date DESC, Journal_Entry_ID DESC

请注意,此处不需要WHERE子句,因为我们已经通过Entry_Date进行排序。

答案 2 :(得分:0)

SELECT TOP 1 Journal_Entry_ID, Entry_Date
FROM Journal_Entry
WHERE Entry_Date = (SELECT MAX(Entry_Date) FROM Journal_Entry)
ORDER BY Journal_Entry_ID DESC;