参见下表:
id - member_id - day
0 1 1
1 1 1
2 1 2
3 2 2
4 1 3
5 2 3
6 2 3
7 1 3
8 1 3
9 2 3
让我们说我想做点什么:
SELECT `day`,
COUNT(`id`) AS `count`
FROM `table`
WHERE `member_id` = 1
GROUP BY `day`
ORDER BY `day` DESC
LIMIT 5
我希望结果如下:
day - count
3 3
2 1
1 1
请注意第1天的计数是如何减半的,因为只有该成员的最近五行被分组。相反,我得到了最后五组,按日排序。
如何仅使用WHERE条件对最新的 n 行进行分组?
实际上,我想使用WHERE,然后使用LIMIT,然后才使用GROUP。
答案 0 :(得分:3)
我认为你想使用limit
的子查询:
SELECT `day`, COUNT(`id`) AS `count`
FROM (SELECT t.*
FROM `table` t
WHERE `member_id` = 1
ORDER BY `day` DESC
LIMIT 5
) t
GROUP BY `day`
ORDER BY `day` DESC;