基于Dbeaver的SQL需求:按会员ID与服务日期累加Units
解决方案
要实现按会员ID(Mbr_id)和服务日期(DOS)汇总units,并计算每个会员的历史累计units,可使用SQL窗口函数完成,以下是适配DBeaver的通用SQL语句:
SELECT Mbr_id, DOS, SUM(units) AS units, SUM(SUM(units)) OVER ( PARTITION BY Mbr_id ORDER BY DOS ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS Total_sum_units FROM your_table_name GROUP BY Mbr_id, DOS ORDER BY Mbr_id, DOS;
关键说明:
GROUP BY Mbr_id, DOS:先按会员和日期维度汇总每日的units数值SUM(SUM(units)) OVER (...):嵌套聚合函数实现累计计算:PARTITION BY Mbr_id:指定按会员分组,确保累计值仅在同一会员内计算ORDER BY DOS:按服务日期排序,保证累计是按时间顺序累加ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW:明确累计范围是从当前会员的第一行到当前行(部分数据库默认此行为,显式写出更清晰)
注意事项:
- 替换语句中的
your_table_name为实际数据表名称 - 若
DOS为字符串类型,需先转换为日期格式再排序,例如MySQL中可改为ORDER BY STR_TO_DATE(DOS, '%m/%d/%Y'),PostgreSQL则用ORDER BY TO_DATE(DOS, 'MM/DD/YYYY'),根据你使用的数据库类型调整即可
内容的提问来源于stack exchange,提问作者Amit Kumar
相关产品推荐
相关产品推荐

