2017-07-11 16 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

「ハード」部分が「簡単」部分よりもどのように難しいかはわかりません;-) – 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'sとの違いがわかりますが、私は間違っていることを喜ばしく思っていますが、このソリューションがそれを上回ると思われます。

関連する問題