在SQL中计算滚动月总和
我有数据表明添加新客户的日期。同时,也有一些客户可能已经失踪的例子。例如: 客户号 添加日期 遗失日期 1. 01-5-20 无效的 2. 01-5-20 20年8月1日 3. 20年7月1日 无效的 4. 20年8月1日 无效的 5. 01-5-20 无效的 6. 01-JUN-20 无效的 7. 01-JUN-20 无效的 8. 01-5-20 无效的在SQL中计算滚动月总和,sql,oracle,Sql,Oracle,我有数据表明添加新客户的日期。同时,也有一些客户可能已经失踪的例子。例如: 客户号 添加日期 遗失日期 1. 01-5-20 无效的 2. 01-5-20 20年8月1日 3. 20年7月1日 无效的 4. 20年8月1日 无效的 5. 01-5-20 无效的 6. 01-JUN-20 无效的 7. 01-JUN-20 无效的 8. 01-5-20 无效的 您可以将聚合与窗口函数一起使用: select trunc(date_added, 'MON'), count(*) as cnt_in_m
您可以将聚合与窗口函数一起使用:
select trunc(date_added, 'MON'), count(*) as cnt_in_month,
sum(count(*)) over (order by trunc(date_added, 'MON')) as running_cnt
from t
group by trunc(date_added, 'MON');
注意:这会将日期截断为月份,因此包含年份。作为一般规则,您希望在使用月份时包括年份。它类似于
SELECT
DATE_ADDED,
SUM(COUNT(*)) OVER(ORDER BY DATE_ADDED)
FROM T
GROUP BY DATE_ADDED
如果你的日期不总是一个月的第一天,那么使用TRUNC(DATE_加上'MM')
将窗口功能与分组混合使用时,首先完成分组。。这意味着查询组和计数将对分组的计数执行求和窗口功能。。当使用求和覆盖时,默认行为是按照指定的顺序对数据执行滚动求和。windowspec是OVER(在无界的前一行和当前行之间按x行排序)的缩写,它的意思是“在每一行上,将前面的所有行加起来,回到分区的开头”,这有效地实现了滚动和