获取每个用户和每天的最新行(基于时间戳列)的结果

时间:2016-10-17 10:12:56

标签: mysql

我有一张名为 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

我喜欢为每个用户获取每天的最新行(基于时间创建)。

我尝试了以下查询;

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,但无法找到解决问题的方法。

1 个答案:

答案 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