2010-01-26 25 views
1

我有一个Journal_Entry表,主键为Journal_Entry_ID,以及(其他列中)为Entry_Date列。SQL:如何从多个记录中选择最高的PK返回

我试图做一个查询,选择最新的Entry_Date - 通过SELECT MAX(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。

回答

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

注意,因为我们是由ENTRY_DATE已经订购WHERE子句是没有必要在这里。

+1

正确的答案,但它为什么是社区wiki? – 2010-01-26 20:36:59

+1

@ Pentium10:在这个答案中没有'WHERE'子句和子查询,这就是为什么它是好的(对我来说)。 – 2010-01-26 20:37:51

+0

请参阅我上面的修改。我很抱歉。毕竟,我正在使用SQL Server。对困惑感到抱歉。 – 2010-01-26 20:38:26

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; 
+0

@ Pentium10,谢谢你的答案。但我认为它会炸毁,因为SELECT MAX查询不能返回多个记录。如果是这样,Entry_Date = [多个记录]将不起作用。上面的查询仍然没有达到我所需要的,我不这么认为。 – 2010-01-26 20:42:03

+0

尝试查询,'SELECT MAX'返回日期1记录,并按该日期过滤记录,例如:当天有10条记录,进一步记录按条目id降序排列,因此最近的条目位于位置1,进一步阅读您错过了仅选择1条记录的“TOP 1”条款......因此这将是入境日期的最新条目 – Pentium10 2010-01-26 20:45:01

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 
+0

第一个不会 - 在journal_entry_id上没有任何顺序以确保它是最高的 – 2010-01-26 20:56:53

+0

您是正确的。我打字太快了!我修改了附加的Order By子句。 – DWong 2010-01-26 21:18:13