2015-07-13 72 views
2

我正在努力與sql命令來查詢我需要的數據,並希望得到一些幫助。 比方說,我們有像在DB數據:查詢名稱與最新日期

Joe 101 2014-02-01 
Max 102 2014-04-02 
Joe 102 2015-01-01 
Am 103 2012-01-04 
Joe 103 2015-05-05 
Am 103 2014-02-02 
Tom 103 2015-01-01 

我希望得到的結果(無順序)。基本上得到最新的上午,Max和喬(不是湯姆)的

Am 103 2014-02-02 
Max 102 2014-04-02 
Joe 103 2015-05-05 
+2

爲什麼不是湯姆?有什麼反對他? –

+2

請使用您正在使用的SQL類型標記您的問題。 –

回答

0

假設你正在使用MySQL:

SELECT name, id, date 
FROM table t1 INNER JOIN 
(
    SELECT name, MAX(date) AS date 
    FROM table 
    GROUP BY name 
) t2 
ON t1.name = t2.name AND t1.date = t2.date 
WHERE t1.name = 'Am' OR t1.name = 'Max' OR t1.name = 'Joe' 

內部查詢查找每個名字的最後日期,而這個結果是然後JOIN對該表進行編輯以獲得其他信息。

正如@GordonLinoff指出的那樣,這種對湯姆的偏見需要解釋。

0

這是一個通用的SQL版本。不確定您的業務規則以及是否可以安全地使用數字值MAX,但如果是這樣,查詢非常簡單。

SELECT 
    Name, 
    MAX(Id) AS Id, 
    MAX([Date]) AS [Date] 
FROM [table] 
WHERE Name <> 'Tom' -- Either exclude Tom or include others 
-- WHERE Name IN ('Am', 'Max', 'Joe') 
GROUP BY Name 

如果不能確保安全的ID和日期字段的最大,那麼你可能要考慮等效ROW_NUMBER函數的語法爲您的數據庫系統:

SELECT 
    Name, 
    Id, 
    [Date] 
FROM (
    SELECT 
     Name, 
     Id, 
     [Date], 
     ROW_NUMBER() OVER (PARTITION BY Name 
      ORDER BY [Date] DESC) AS RowNum 
    FROM [table] 
    WHERE Name <> 'Tom' -- Either exclude Tom or include others 
    -- WHERE Name IN ('Am', 'Max', 'Joe') 
    ) T 
WHERE RowNum = 1 
+0

請投這個問題。 –

+1

@sithathai - 如果它幫助你並且接受它,如果它解決了你的問題,請隨時註冊一個答案。這有助於他人知道哪些答案可能有所幫助,並且是否解決了您的問題。它也增加了你的聲譽。 –