2012-05-08 18 views
4

私はすでにこの問題の解決策があると知っていますが、私にとってはうまくいかないようです。MySQLで最後のレコードを選択する方法

データベースごとに、ユーザーごとに、毎日最後のレコードを選択します。私はデータベースを持っている国のユーザーの場所を格納し、日付を2番目にダウン。

私が実行しようとしている選択クエリは次のようになります。しかし、これは実際に行うことは正しくidcountryを対応する私の毎日からの最後の日付を示していないが、

SELECT MAX(date), id, country FROM dk_location_records WHERE userid = '10' 
AND (date > '2012-04-06 00:00:00' AND date < '2012-05-08 23:59:59') 
AND active = '1' GROUP BY DATE(date) ORDER BY date ASC 

。実際に最初のidcountryが最後のdateと並んでいます。

私は間違っていますか?

大変助かりました!

おかげで、

ジャック

+0

あなたの順序を変更することにより、正しい結果を得る必要がありますか? – Romain

+0

ユーザーごとに多くのレコードを必要としないことを確認できますか?ユーザーあたりの最後のエントリだけです。基本的には "どこにいたユーザーX最後"です。以下のいくつかの答えは誤解されているようです。 – Cylindric

+0

Devartのソリューションは、私が後にしたものです。特定のユーザーのために、毎日の最後のエントリが必要でした。 ID 10のユーザーのために、4月6日以降、毎日の終わりにその場所を知りたいと思います。ありがとう。 –

答えて

10

、ユーザーごとに、それぞれの日から最後のレコードを表示するには、この文字列で検索してください -

SELECT t1.* FROM dk_location_records t1 
    JOIN (SELECT DATE(date) date_date, userid, MAX(date) max_date 
     FROM dk_location_records 
     GROUP BY date_date, userid 
     ) t2 
    ON t1.date = t2.max_date AND t1.userid = t2.userid; 

...あなたが必要な場合は、あなたのWHERE条件を追加します。

+0

Devartさん、ありがとうございました! –

0

私はあなたがDATE(date)によってグループいけないと思います。私はあなたがグループuserid,countryですべきだと思います。このように:

SELECT 
    MAX(date), userid, country 
FROM 
    dk_location_records 
WHERE 
    userid = '10' 
    AND (date > '2012-04-06 00:00:00' AND date < '2012-05-08 23:59:59') 
    AND active = '1' 
GROUP BY userid,country 
ORDER BY date ASC 
-1

あなたは、特定のユーザーのために同じタイムスタンプを持つ複数のレコードが存在できDESCにBYの代わりに、ASC

+0

それは私が最初に思ったことですが、残念ながらそれは何の違いもなく、同じ問題が続く。 –