Mysql每个用户每个日期限制2行

时间:2016-09-07 08:35:29

标签: mysql mysql-variables

好吧,让我说我有一个基本的表

id
user_id
created_at

和一些数据

id  user_id  created_at
1     1      2016-09-06
2     1      2016-09-06 
3     1      2016-09-06 
4     1      2016-09-07 
5     1      2016-09-08 
6     1      2016-09-08 
7     1      2016-09-08 

我想要实现的是选择每个DATE每个USER最多两行created_at 。我只显示来自一个用户的数据,但我希望你明白这一点。

所以select的结果应该是

id  user_id  created_at
1     1      2016-09-06 
2     1      2016-09-06 
4     1      2016-09-07 
5     1      2016-09-08 
6     1      2016-09-08 

我知道我不得不使用 LIMIT 关键字,但我不确定如何。我也很确定我必须在日期之前使用子查询和组。

我希望你能理解这个问题,如果有什么难以理解的话,请提出一些问题。

1 个答案:

答案 0 :(得分:1)

一种方法是使用变量:

SELECT id, user_id, created_at
FROM (
  SELECT id, user_id, created_at,
         @rn := IF(@dt = created_at, @rn + 1,
                   IF(@dt := created_at, 1, 1)) AS rn
  FROM mytable
  CROSS JOIN (SELECT @rn := 0, @dt := '1900-01-01') AS var
  ORDER BY created_at) AS t
WHERE t.rn <= 2  

Demo here