好吧,让我说我有一个基本的表
事
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 关键字,但我不确定如何。我也很确定我必须在日期之前使用子查询和组。
我希望你能理解这个问题,如果有什么难以理解的话,请提出一些问题。
答案 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