2017-07-11 150 views
-1

我有以下結構的表:如何獲取給定記錄組中每天的最後一條記錄?

id | service_name | subscribers_count | date 
1 | service 1 | 1     | 2017-07-01 01:01:01 
2 | Service 1 | 2     | 2017-07-01 01:01:02 
3 | Service 1 | 3     | 2017-07-02 01:01:01 
4 | Service 1 | 2     | 2017-07-03 01:01:01 
5 | Service 1 | 3     | 2017-07-04 01:01:01 
6 | Service 2 | 1     | 2017-07-01 01:01:01 
7 | Service 2 | 2     | 2017-07-01 01:01:02 
8 | Service 2 | 3     | 2017-07-01 01:01:03 
9 | Service 2 | 4     | 2017-07-02 01:01:01 

可以很容易地獲取最後一條記錄每個服務,但我需要更多的 - 我需要讀取最後記錄每一天的每個服務。這是我期望得到的:

2 | Service 1 | 2     | 2017-07-01 01:01:02 
3 | Service 1 | 3     | 2017-07-02 01:01:01 
4 | Service 1 | 2     | 2017-07-03 01:01:01 
5 | Service 1 | 3     | 2017-07-04 01:01:01 
8 | Service 2 | 3     | 2017-07-01 01:01:03 
9 | Service 2 | 4     | 2017-07-02 01:01:01 

什麼是最有效的方法來寫它?

+0

向我們展示簡單的部分 – Strawberry

+0

@Strawberry這裏您是 https://stackoverflow.com/questions/10999522/how-to-get-the-latest-record-in-each-group-using-group-by – CorrieSparrow

+0

我看不出'硬'部分比'easy'部分更難;-) – Strawberry

回答

1

一種方法是where子句中相關子查詢:

select t.* 
from t 
where t.date = (select max(t2.date) 
       from t t2 
       where t2.service_name = t.service_name and 
         date(t2.date) = date(t.date) 
       ); 
+0

(service_name) - 雖然我同意它應該是一個id – Strawberry

0

要使用自己的解決方案......

SELECT t1.* 
    FROM messages t1 
    JOIN 
    (SELECT from_id 
      , SOMETHING HERE 
      , MAX(timestamp) timestamp 
     FROM messages 
     GROUP 
      BY from_id 
      , SOMETHING HERE 
    ) t2 
    ON t1.from_id = t2.from_id 
    AND SOMETHING HERE 
    AND t1.timestamp = t2.timestamp; 

該解決方案是非常 '有效'。雖然你只會欣賞這個解決方案和Gordon在相當大的數據集上的區別,但我懷疑這個解決方案將勝過那個 - 儘管我很高興被證明是錯誤的。

相關問題