-1

好的,可以说我有一张基本的桌子

事物

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 

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

所以选择的结果应该是

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关键字,但我不太确定如何使用。我也很确定我必须使用子查询并按日期分组。

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

4

1 回答 1

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  

演示在这里

于 2016-09-07T08:40:12.963 回答