SQL如何实现从指定上月开始按自然月份升序排序查询结果
SQL调整方案
原代码问题说明
你原语句的ORDER BY子句传入的是固定常量(即上月的月份数字),所有行的排序优先级完全一致,排序规则没有生效,无法得到预期的顺序。
修正后代码
适配SQL Server环境(你当前用的GETDATE()属于SQL Server语法),代码如下:
DECLARE @PreviousMonth INT = MONTH(DATEADD(mm, -1, GETDATE())) SELECT MonthNumber AS Code, MonthName AS Description FROM MonthName ORDER BY -- 第一排序规则:大于等于上月的月份优先排列 CASE WHEN MonthNumber >= @PreviousMonth THEN 0 ELSE 1 END, -- 第二排序规则:同优先级内按月份数字升序排列 MonthNumber ASC
逻辑说明
- 用
CASE表达式把所有月份拆为两组:月份数大于等于上月的归为0组,小于上月的归为1组,排序时0组优先级更高,会排在前面 - 两组内部都按照月份数字升序排列,就能实现从上月开始,到12月后接1月到上月前一个月的排序效果,适配所有月份场景:
- 若当前为9月,上月为8月,返回顺序为8、9、10、11、12、1、2、3、4、5、6、7,完全符合你的预期
- 若当前为1月,上月为12月,返回顺序为12、1、2、3...11,也符合需求
内容的提问来源于stack exchange,提问作者DooDooDoo2
相关产品推荐
相关产品推荐

