使用PARTITION BY子句计算YTD时按年重置聚合的问题
解决按年度重置的YTD Revenue计算问题
你的问题出在分区条件没包含年份,原SQL只按国家对分区,导致累计收入会跨年度持续累加,不会每年重置。要实现每年单独累计,需要在分区里加上date_move对应的年份。
修正后的SQL示例
根据你使用的数据库类型,提取年份的函数略有不同,以下是主流数据库的写法:
通用版(适用于PostgreSQL、Oracle等)
SELECT sender_country, receiver_country, date_move, revenue, SUM(revenue) OVER ( PARTITION BY sender_country, receiver_country, EXTRACT(YEAR FROM date_move) ORDER BY date_move ) AS YTD_Revenue FROM your_table;
MySQL/SQL Server版
SELECT sender_country, receiver_country, date_move, revenue, SUM(revenue) OVER ( PARTITION BY sender_country, receiver_country, YEAR(date_move) ORDER BY date_move ) AS YTD_Revenue FROM your_table;
逻辑说明
PARTITION BY sender_country, receiver_country, 年份:将数据按「发送国-接收国-年份」分成独立分组,每个分组内的累计计算不会跨组ORDER BY date_move:确保每个分组内按日期顺序累加,得到真正的「年初至今」累计值
这样就能实现加拿大-尼日利亚2016年累计到5.08,2017年从0开始重新累计到10.24的需求。
内容的提问来源于stack exchange,提问作者Panri93
相关产品推荐
相关产品推荐

