SQL窗口函数存在NULL值时如何正确计算累计差值并保持排序
一对多关联表累计指标计算排序问题修复方案
需求说明
现有一对多关联的两张表:
- 表A字段:
A_Id、WeightA、B_Id、A交易时间字段 - 表B字段:
B_Id、WeightB、B交易时间字段
需计算三类指标生成报表:
- 按
B_Id分组的WeightA总和 - 按时间顺序累计的
WeightA总和与累计WeightB - 上述两个累计值的差值(累计差值)
原有实现问题
原有实现通过窗口函数计算时,排序规则设置为按B_Id排序,会导致B_Id为NULL的记录排在最前方,出现排序错乱问题,最终计算结果不符合业务预期。
适配业务规则的排序逻辑
业务要求排序优先取B的交易时间,当B_Id为NULL时取对应A的交易时间,可通过如下逻辑生成参考排序字段:RefDateTime = COALESCE(B_TransactionDatetime, A_TransactionDatetime)
最终解决方案
将窗口函数的ORDER BY排序字段替换为RefDateTime即可得到正确计算结果。
内容的提问来源于stack exchange,提问作者zeroflaw
相关产品推荐
相关产品推荐

