You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

逻辑说明

  1. 用CASE表达式把所有月份拆为两组:月份数大于等于上月的归为0组,小于上月的归为1组,排序时0组优先级更高,会排在前面
  2. 两组内部都按照月份数字升序排列,就能实现从上月开始,到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:39:03