T-SQL排序难题求助:基于difStartSecs与difExpireSecs定制排序
T-SQL定制排序方案
根据你的需求,我们可以通过多层条件的ORDER BY实现预期排序,核心逻辑拆解如下:
- 分组区分:将
difStartSecs > 0的记录统一排在末尾,其余(负数/零)记录前置 - 负数/零组内排序:按
difExpireSecs升序排列(剩余运行时长越短,排序越靠前),这既满足你“优先考虑剩余时长”的要求,也解释了启动最久的记录1因剩余时长最长而排在负数组最后 - 正数组内排序:按
difStartSecs升序排列,匹配你给出的8、9的顺序
完整T-SQL代码
SELECT Record, difStartSecs, difExpireSecs FROM YourTable ORDER BY -- 第一优先级:正数记录后置 CASE WHEN difStartSecs > 0 THEN 1 ELSE 0 END, -- 第二优先级:负数/零组按剩余时长升序 CASE WHEN difStartSecs <= 0 THEN difExpireSecs ELSE NULL END, -- 第三优先级:正数组按启动时间升序 difStartSecs;
验证结果
执行后将得到你期望的排序顺序:2,7,3,4,5,6,1,8,9,完全匹配需求。
内容的提问来源于stack exchange,提问作者BigIWT
相关产品推荐
相关产品推荐

