如何仅对最后的'n`行进行分组?

时间:2015-02-09 22:31:01

标签: mysql sql group-by mariadb

参见下表:

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。

1 个答案:

答案 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;