mysql - GROUP BY 日期和总和向前是但向后否

标签 mysql

我有一张 table

PEOPLE, DATE, DELETED
Amanda, 2015-03-01, Null
Ray, 2015-03-01, Null
Moe, 2015-04-01, Null
Yan, 2015-05-01, Null
Bee, 2015-05-05, 2015-06-12

现在我需要将其分组并与这样的月份相加:

March: 2 people
April: 3
May: 5
June: 5
July: 4

因此,新人不应计入上个月,但应计入我的范围(一月至六月)的下个月。如果某个人被删除,他应该在他被删除的月份最后一次与其他人一起统计。

如何为此编写查询?

最佳答案

这至少可以通过运行总计来解决。这只是如何做到这一点的概述,您需要为实际的解决方案做一些工作:

select people, date, 1 as persons from yourtable
union all
select people, deleted, -1 as persons from yourtable where deleted is not null

然后对这些数据进行累计,这样您就可以对 +-1 人字段进行求和,这样您就可以得到到目前为止的人数。

对于月中发生的事件,您必须将日期调整为当月或下个月的开始,无论您希望以何种方式计算它们。

如果您还需要没有发生任何变化的月份,则可能需要一个表格,其中包含您所需的最大日期范围的每个月的第一天,例如 1.1.2000 - 1.12.2100 .

关于mysql - GROUP BY 日期和总和向前是但向后否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850261/

相关文章:

mysql - 排名系统在排名输出方面的差距

php - 在更新数据库时如何使用 php pdo 添加自动 inreement

mysql 查询从两个日期获取月份名称列表

php - 给定尺寸的所有矩形的搜索矩阵(选择座位 block )

mysql - 不使用限制和子查询无法从 emp 表中找到第二高的薪水

php - 结合 2 个 MySQL 查询

php - 如何从同一张表中获取相关行?

MySQL 复制不在 binlog 中运行更新

mysql - SQL latin1 到 utf-8 转换

mysql - 错误指定的键太多;最多允许 64 个键