2011-12-23 8 views
4

私は毎時レコードをテーブルに挿入しています。今私は過去30日間の毎日の最新のレコードを取得する必要があります。SQL - 過去7日間の最後のレコードを取得します。

は、ここに私のテーブルです:

pl_scores: { 
    score_id: 'BIGINT(255) PRIMARY KEY AUTO_INCREMENT' 
, pid: 'INT(100)' 
, score: 'INT(255)' 
, rank: 'INT(50)' 
, city_cnt: 'INT(10)' 
, updatedAt: 'DATETIME' 
} 

私はその日のために最新のをプルする方法についての損失で午前毎日のための24件の記録があるため。どんな助けもありがとう。

答えて

4

ステップ1 - グループを1日ごとに分割します。
ステップ2 - 各グループの最後のエントリのタイムスタンプを選択します。
ステップ3 - 戻って、それらのタイムスタンプに一致するレコードを取得します。


SELECT 
    pl_scores.* 
FROM 
    pl_scores 
INNER JOIN 
    (SELECT MAX(updatedAt) AS maxUpdatedAt FROM pl_scores GROUP BY DATE(updatedAt)) as Lookup 
    ON Lookup.MaxUpdatedAt = pl_scores.updatedAt 

注:これは、各レコードはupdatedAtに異なる値を持っていることを前提としています。一意ではなく、任意の日に複数のレコードが最新のものである場合は、すべての関連レコードが返されます。

+0

申し訳ありませんが、完了する前に保存してください。 Ooops。今すぐ完了してください:) – MatBailie

+0

私はちょうど注文を追加することができ、最後の30日または7日間を選択するには、正しい? –

+0

@PastorBones - うん。 'WHERE updatedAt> = 'from date here''を使用すると、より良いパフォーマンスが得られます。それはまた、レコードの数ではなく、日数を保証します。 (クリスマスにレコードが挿入されていない場合など) – MatBailie

関連する問題