2016-09-07 5 views
-1

Хорошо так что позволяет сказать, что есть базовые таблицыпредел Mysql 2 строк на дату каждого пользователя

вещь

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 of 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 ключевое слово, но я не уверен, как это сделать. Я также уверен, что я должен использовать подзапрос и группу по дате.

Надеюсь, вы понимаете проблему и, пожалуйста, задавайте несколько вопросов, если есть что-то трудное для понимания.

ответ

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