【问题标题】:How do I group only the last `n` rows?如何仅对最后的“n”行进行分组?
【发布时间】:2015-02-09 22:31:01
【问题描述】:

取下表:

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。

【问题讨论】:

  • 您正在从查询中选择日期。这就是我所知道的。
  • 我不太明白,你知道HAVING子句吗?
  • @LuisSiquot 我不明白HAVING 是如何让我获得给定成员的最新n 行的......?

标签: mysql sql group-by mariadb


【解决方案1】:

我认为您想使用带有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;

【讨论】:

  • 我最初无法让子查询工作,现在我意识到我可能没有 WHERE 子句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多