5

私はこの質問に対するいくつかの解決策がすでにあることを知っていますが、それらは私のために働いていないようです。

データベース上のユーザーごとに、毎日の最後のレコードを選択したいと思います。国別のユーザーの場所と秒単位の日付を格納するデータベースがあります。

私が実行しようとしている選択クエリは次のとおりです。

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

ただし、これが実際に行うことは、毎日の最終日を表示することですが、正しく対応idしているわけではありませんcountry。実際には、最後と一緒に最初idとを取得します。countrydate

私は何が間違っているのですか?

よろしくお願いします!

ありがとう、

ジャック

4

3 に答える 3

11

このクエリを試して、ユーザーごとに、毎日の最後のレコードを表示してください-

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条件を追加します。

于 2012-05-08T15:01:01.077 に答える
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
于 2012-05-08T14:55:29.803 に答える
-1

ORDER BYをASCではなくDESCに変更すると、正しい結果が得られるはずです。

于 2012-05-08T15:32:45.230 に答える