2016-10-17 2 views
0

私はplay_progressと呼ばれるテーブルがあります。各ユーザーと毎日最新の行(タイムスタンプ列に基づいて)の結果を取得

play_progress

id  user_id coins  timecreated 

1  1   20  2016-01-23 06:55:09 
2  1   24  2016-01-23 06:59:22 
3  1   28  2016-01-23 07:05:34 
4  2   4  2016-01-23 07:10:58 
5  2   10  2016-01-23 07:12:08 
6  1   32  2016-01-24 00:07:48 
7  2   14  2016-01-24 00:12:08 
8  1   35  2016-01-24 00:44:48 
9  2   18  2016-01-24 00:55:08 

私は、ユーザーごとにそれぞれの日のために(timecreatedに基づく)最新の行を取得したいです。

私は次のクエリを試しました。

SELECT user_id, coins, MAX(timecreated) 
FROM player_progress 
GROUP BY user_id, DATE(timecreated); 

それは毎日の結果を示しますが、それは間違ったtimecreatd値を与えます。

どこが間違っていますか?

id user_id coins timecreated 
1  1  28 2016-01-23 07:05:34 
5  2  10 2016-01-23 07:12:08 
8  1  35 2016-01-24 00:44:48 
9  2  18 2016-01-24 00:55:08 

よう

結果の詳細は、私はSOを通じて検索しましたが、私の問題への解決策を見つけることができませんでした。

+0

がコイン列を選択していない持っていますそれ以上の処理に必要ない場合 –

答えて

3

あなたはより多くの列をフェッチする必要がある場合は、(user_idtimecreatd)をグループ化するために使用されるものは、あなたが、より複雑なクエリを必要とする:

SELECT p.user_id, p.id, coins, p.timecreated 
FROM play_progress p INNER JOIN 
(SELECT user_id, MAX(timecreated) as max_time 
FROM play_progress 
GROUP BY user_id, DATE(timecreated)) pp 
    ON p.user_id = pp.user_id 
    AND p.timecreated = pp.max_time; 

ここでは、sample

関連する問題