2011-12-28 10 views
1

私は過去7日間の各日の最新レコードを取得しようとしています。ただし、返された各レコードはupdatedAt(最新の日)と同じ日付ですが、他のデータは正しく戻ります。どのように私は各レコードの正しい日付を私のSQLクエリを変更することができますか?過去7日間の最後のレコードを取得します

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 
WHERE pl_scores.pid = 977 ORDER BY pl_scores.updatedAt ASC LIMIT 7 
+0

あなたのテーブルにはどの列がありますか?あなたはSELECT tab1.col1、tab1.col2 .... tab2.colN、max(updatedAt)のようなものを試してみるべきです。最大FRom tab1はtab2を結合します(バインディングについてはわかりません).... group by max ORDER BY pl_scores。 updatedAt ASC LIMIT 7。 – Kousalik

答えて

0

その種類は、あなたのデータベースが時間/日付をどのように格納するか、なぜ/いつ/どのように変化するかに依存します。何回の日付/時刻フィールドに保存されていますか? GROUP BYDAY(updatedAT)あなたの結果にあなたが持っている

0
SELECT pl_scores.* FROM pl_scores 
INNER JOIN (SELECT MAX(updatedAt) AS maxUpdatedAt, id FROM pl_scores WHERE updatedAT >= DATE_SUB(updatedAt, INTERVAL 1 WEEK) 
GROUP BY DAY(updatedAt)) as Lookup ON Lookup.id = pl_scores.id 
WHERE pl_scores.pid = 977 ORDER BY pl_scores.updatedAt ASC LIMIT 7 
2

日ごとにMAXを得るために - また、あなたは一週間よりも古い値を取得していないことを確認するためにWHERE updatedAT >= DATE_SUB(updatedAt, INTERVAL 1 WEEK)句を追加します。

また、2つのレコードが

SELECT pl_scores.* FROM pl_scores 
INNER JOIN 
(SELECT MAX(updatedAt) AS maxUpdatedAt, id FROM pl_scores 
    WHERE updatedAT >= DATE_SUB(updatedAt, INTERVAL 1 WEEK) 
    GROUP BY DAY(updatedAt)) as Lookup ON Lookup.id = pl_scores.id 
WHERE pl_scores.pid = 977 ORDER BY pl_scores.updatedAt ASC LIMIT 7 

は、この情報がお役に立てば幸い同じupdatedAt値を持つケースを避けるために、id列に参加し、使用を変更します。

関連する問題