按ID和日期计算年度生产增长量的SQL查询问题排查
SQL语句问题排查与修正
问题根源
原SQL语句的核心问题在于窗口函数未按ID进行分区:
- 语句中
sum(count(productionID)) over (order by date)没有添加partition by ID,导致计算累计生产值时,会把ID=1和ID=104的所有数据混在一起累加,而非各自独立计算,这直接造成ID=104的结果不符合预期。 - 额外问题:最终排序
order by ID, Date desc与窗口函数内的order by date(默认升序)逻辑冲突,会导致结果展示顺序和累计计算的时间顺序不一致,容易造成误解。
修正后的SQL语句
select top 100 ID, Date, count(productionID) as Daily_Production_Count, sum(count(productionID)) over (partition by ID order by Date) as Annual_Production from Production_Table where ID in (1, 104) group by ID, Date order by ID, Date;
修正说明
- 添加
partition by ID:让窗口函数的累计计算严格限定在同一个ID的分组内,确保不同ID的生产数据各自独立累加,解决ID=104的计算错误问题。 - 增加字段别名:给
count(productionID)添加Daily_Production_Count别名,使结果集的字段含义更清晰。 - 统一排序逻辑:将最终排序改为
order by ID, Date(升序),与窗口函数内的时间排序方向一致,保证累计值是按时间从早到晚逐步累加,符合年度生产增长量的计算逻辑。
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

