2017-08-29 40 views
2

我有一張桌子。它有一個id的pk和一個[service,check,datetime]的索引。來自獨特的mysql索引的最新日期時間

id service check datetime score 
---|-------|-------|----------|----- 
1 | 1  | 4 |4/03/2009 | 399 
2 | 2  | 4 |4/03/2009 | 522 
3 | 1  | 5 |4/03/2009 | 244 
4 | 2  | 5 |4/03/2009 | 555 
5 | 1  | 4 |4/04/2009 | 111 
6 | 2  | 4 |4/04/2009 | 322 
7 | 1  | 5 |4/05/2009 | 455 
8 | 2  | 5 |4/05/2009 | 675 

給定一個服務2我需要爲每個唯一檢查選擇行,它有最大日期。所以我的結果看起來像這張表。

id service check datetime score 
---|-------|-------|----------|----- 
6 | 2  | 4 |4/04/2009 | 322 
8 | 2  | 5 |4/05/2009 | 675 

有沒有簡短的查詢呢?我擁有的最好的就是這個,但它會返回太多的支票。我只需要在最新的日期時間進行獨特的檢查。

SELECT * FROM table where service=?; 
+0

這種類型的問題已經在堆棧溢出回答了很多次。按照[tag:最大每個組的標籤]。 –

回答

3

首先,你需要找出最大的日期每個檢查

SELECT `check`, MAX(`datetime`) 
FROM YourTable 
WHERE `service` = 2 
GROUP BY `check` 

然後加入回去取數據的其餘部分。

SELECT Y.* 
FROM YourTable Y 
JOIN (SELECT `check`, MAX(`datetime`) as m_date 
     FROM YourTable 
     WHERE `service` = 2 
     GROUP BY check) as `filter` 
    ON Y.`service` = `filter`.service 
AND Y.`datetime` = `fiter`.m_date 
WHERE Y.`service` = 2 
相關問題