如何仅对最后 `n` 行进行分组?
How do I group only the last `n` rows?
采取以下table:
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 天的计数如何减半,因为只有该成员的最近五行被分组。相反,我得到最后五个组,按天排序。
如何仅将最近的 n 行与 WHERE 条件分组?
实际上,我想使用 WHERE,然后是 LIMIT,然后才是 GROUP。
我想你想用 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;
采取以下table:
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 天的计数如何减半,因为只有该成员的最近五行被分组。相反,我得到最后五个组,按天排序。
如何仅将最近的 n 行与 WHERE 条件分组?
实际上,我想使用 WHERE,然后是 LIMIT,然后才是 GROUP。
我想你想用 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;