2017-08-29 4 views
2

私はテーブルを持っています。それはidのpkと[service、check、datetime]のインデックスを持っています。一意のmysqlインデックスから最新のdatetime

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 

これについての短い質問はありますか?私が持っている最高のものはこれですが、それはあまりにも多くの小切手を返します。私は最新のdatetimeでユニークなチェックが必要です。

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 
関連する問題