GROUP BY日期和总和一起前进是,但后退否

时间:2015-06-15 16:27:16

标签: mysql

我有一张桌子

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

所以新人不应该在上个月被计算在内,但他们应该在接下来的几个月中为我的范围(1月至6月)。如果男人被删除了,那么当他被删除时,他应该在上个月的最后一次与他人一起被计算在内。

如何为此编写查询?

1 个答案:

答案 0 :(得分:0)

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

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。