SQL Partition Order By无法正确排序Decimal类型数值问题咨询
问题原因
你当前的排序逻辑不符合需求,核心问题出在窗口函数的ORDER BY配置上:
- SQL的
ORDER BY默认排序规则为升序(ASC),你没有给lastmodifieddate指定降序规则,系统会优先把更早的记录排在前面。哪怕你肉眼看到的日期展示值完全一致,数据库底层存储的时间戳通常包含毫秒级精度,更早的小数值时间会优先排序,直接导致同日期下高资产额的记录被挤到后排。 - 你的需求是「优先最新日期、再最高数值」双维度降序,但你仅给资产字段加了
DESC标记,日期维度的排序方向完全和需求相反。
修复方案
调整窗口函数的排序规则,给lastmodifieddate也加上降序标记即可,修改后的SQL如下:
SELECT contact__c, Ind_Assets_Retail__c, lastmodifieddate, ROW_NUMBER() OVER(PARTITION BY contact__c ORDER BY lastmodifieddate DESC, ind_assets_retail__c DESC) as row_num FROM contact_financial__c
如果修改后资产字段排序仍然异常,可以在排序时显式做类型转换,避免字段存储类型隐性转换导致的排序错误:
SELECT contact__c, Ind_Assets_Retail__c, lastmodifieddate, ROW_NUMBER() OVER(PARTITION BY contact__c ORDER BY lastmodifieddate DESC, CAST(ind_assets_retail__c AS DECIMAL(18,2)) DESC) as row_num FROM contact_financial__c
内容的提问来源于stack exchange,提问作者Julie Nguyen
相关产品推荐
相关产品推荐

