2010-01-26 24 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