2016-10-03 2 views
0

Ниже приведена таблица моей базы данных.MYSQL Выберите группу по и ограничьте группу, если created_at уже на этой неделе

id user_id group_id created_at 
1 1   1   2016-09-29 
2 1   2   2016-10-02 
3 1   3   2016-10-02 
4 1   4   2016-10-03 
5 1   5   2016-10-03 

6 2   1   2016-01-02 
7 2   2   2016-01-02 
8 2   3   2016-01-03 

9 3   1   2016-09-29 
10 3   2   2016-09-30 
11 3   3   2016-10-02 
12 3   4   2016-10-02 
13 3   5   2016-10-03 

Ниже мой запрос sql.

SELECT myTable.* 
FROM myTable 
INNER JOIN (
    SELECT id 
    FROM myTable 
    GROUP BY id 
) group_max 
ON myTable.id = group_max.id 
WHERE YEARWEEK(myTable.add_time) = YEARWEEK(NOW()) 
ORDER BY myTable.user_id ASC, myTable.add_time ASC 

С вышеуказанным запросом я получаю следующий результат.

id user_id group_id created_at 
4 1   4   2016-10-03 
5 1   5   2016-10-03 
2 1   2   2016-10-02 
3 1   3   2016-10-02 

8 2   3   2016-01-03 
6 2   1   2016-01-02 
7 2   2   2016-01-02 

13 3   5   2016-10-03 
11 3   3   2016-10-02 
12 3   4   2016-10-02 

Как выбрать последние 2 последние записи (в течение этой недели) группы user_id в следующем.

id user_id group_id created_at 
5 1   5   2016-10-03 
4 1   4   2016-10-03 

8 2   3   2016-01-03 
7 2   2   2016-01-02 

13 3   5   2016-10-03 
12 3   4   2016-10-02 

ответ

0

Ниже приведен рабочий запрос sql.

SELECT a.* 
FROM myTable AS a 
WHERE (
    SELECT COUNT(*) 
    FROM myTable AS b 
    WHERE b.user_id = a.user_id AND b.created_at >= a.created_at 
) <= 3 
AND YEARWEEK(a.created_at) = YEARWEEK(NOW()) 
ORDER BY a.user_id ASC, a.created_at ASC