2010-07-14 86 views
1

我無法找出SQL語句來檢索特定的一組數據。除最後更新日期以外,所有列都相同,我想要最近的更新日期。例如。
當其他列相等時SQL查詢檢索最新行

Book Author Update 
John Foo  1/21/2010 
John Foo  1/22/2010 
Fred Foo2  1/21/2010 
Fred Foo2  1/22/2010 

那是什麼檢索最新的行查詢?也就是說,返回查詢:

Book Author Update 
John Foo  1/22/2010 
Fred Foo2  1/22/2010 

TIA,
史蒂夫

+2

什麼SQL的味道?除了顯示的內容外,還有其他需要比較的列嗎? – harpo 2010-07-14 15:31:22

+0

你們搖滾!感謝所有的答案。湯姆H.首先回答了問題。順便說一句,你的假設是正確的,我需要更多的查詢。感謝您的第二次查詢。這實際上是我需要的。 – ptsw 2010-07-14 16:52:12

回答

4
SELECT 
    book, 
    author, 
    MAX(update) 
FROM 
    My_Table 
GROUP BY 
    book, 
    author 

這隻能在這種特殊情況下,因爲所有其他列具有相同的值。如果你想通過本書以獲取最新的行,但在這裏筆者(或其他一些列,你將檢索)可能是不同的,那麼你可以使用:

SELECT 
    T.book, 
    T.author, 
    T.update 
FROM 
    (SELECT book, MAX(update) AS max_update FROM My_Table GROUP BY book) SQ 
INNER JOIN My_Table T ON 
    T.book = SQ.book AND 
    T.update = SQ.max_update 
2

固定起來

DROP TABLE #tmpBooks 
    CREATE TABLE #tmpBooks 
    (
     Book VARCHAR(100), 
     Author VARCHAR(100), 
     Updated DATETIME 
    ) 

    INSERT INTO #tmpBooks VALUES ('Foo', 'Bar', '1/1/1980') 
    INSERT INTO #tmpBooks VALUES ('Foo', 'Bar', '1/1/1990') 
    INSERT INTO #tmpBooks VALUES ('Foo', 'Bar', '1/1/2000') 
    INSERT INTO #tmpBooks VALUES ('Foo', 'Bar', '1/1/2010') 
    INSERT INTO #tmpBooks VALUES ('Foo2', 'Bar2', '1/1/1980') 
    INSERT INTO #tmpBooks VALUES ('Foo2', 'Bar2', '1/1/1990') 
    INSERT INTO #tmpBooks VALUES ('Foo2', 'Bar2', '1/1/2000') 

    SELECT Book, Author, Max(Updated) as MaxUpdated 
     FROM #tmpBooks 
     GROUP BY Book, Author 

結果:

Book   Author   MaxUpdated 
--------------- --------------- ----------------------- 
Foo    Bar    2010-01-01 00:00:00.000 
Foo2   Bar2   2000-01-01 00:00:00.000 

(2 row(s) affected) 
+0

對不起,芽,這是無效的SQL。它看起來很誘人,我試過了。 *「Column'Update'在HAVING子句中是無效的,因爲它不包含在聚合函數或GROUP BY子句中。」* – harpo 2010-07-14 15:38:04

+0

@harpo,這應該現在起作用 – CaffGeek 2010-07-14 16:02:12

+0

的確......先前的語法(HAVING Updated = MAX(更新))會很好,當有其他行你想得到,但唉,表達的唯一方法是更詳細。 – harpo 2010-07-14 16:56:19

1

這將得到你所要求的,但有些東西告訴我這不是你想要的。

SELECT Book, Author, MAX(Update) 
    FROM BookUpdates 
GROUP BY Book, Author 

是否有更多的表模式?

0

試試這個(沒有測試的數據,但它應該工作):

SELECT 
    bu.Book, 
    bu.Author 
FROM 
    BookUpdates bu 
     JOIN 
    (SELECT MAX(Updated) as Date FROM BookUpdates) max 
WHERE 
    bu.Updated = max.Date;