SQL ORDER BY从本月开始的月份

时间:2011-03-11 17:11:54

标签: sql sql-server-2005

我有一个返回1-12个月的查询。 (INT)

有没有办法从本月开始订购结果?

示例

3
4
5
6
7
8
9
10
11
12
1
2

谢谢!

编辑:本月desc,我的意思是这个月。个月(GETDATE())

6 个答案:

答案 0 :(得分:3)

按顺序尝试简单数学,如果月份小于当前加12,不确定会对性能产生什么影响......

Order By Case When month(dateColumn) < month(GetDate()) Then month(dateColumn) +12
ELSE month(dateColumn) END

答案 1 :(得分:2)

您可以在那里添加一年用于排序目的。让它们输出如下:

2010-03
2010-04
...
2011-01
2011-02

Pseduo代码:

WHERE year >= 2010 AND month >= 3

不确定您的查询是什么或支持它的数据。

答案 2 :(得分:1)

考虑您的表中有月份列1,2,3,---,11,12值

SELECT *, case when `month`>=3 then `month`
          else `month`+12 end as `temp_month`
          FROM `tbl_name` order by `temp_month`

您将获得类似

的输出
3
4
5
6
7
8
9
10
11
12
1
2

答案 3 :(得分:0)

与Brad的答案类似,添加一年列,然后

...
ORDER BY year, month 

使用ASCending或DESCending排序修饰符,具体取决于您想要做什么。

答案 4 :(得分:0)

如果你不加年,那是不可能的。原因是因为无法判断哪个月份或任何一个月是第一个。

您必须首先按YEAR排序,然后按MONTH排序。

因此,除非您将字段更改为DATE格式或包含YEAR列,否则您无法执行任何操作。除非你想通过ID安排它们;这是第一次进入。

简而言之:没有YEAR =没办法。

答案 5 :(得分:0)

在执行成本方面要好得多:

Select * From
Group By monthcolumn,firstname,lastname 
ORDER BY DATEPART(YEAR,datecolumn) DESC, DATEPART(MONTH, datecolumn) DESC

或者,这个在执行成本方面有点贵:

Select * From
Group By monthcolumn ,firstname,lastname    
ORDER BY CASE WHEN (DATEPART(MONTH, datecolumn))=3 THEN 1
              WHEN (DATEPART(MONTH, datecolumn))=2 THEN 2
              WHEN (DATEPART(MONTH, datecolumn))=1 THEN 3
              WHEN (DATEPART(MONTH, datecolumn))=12 THEN 4
              WHEN (DATEPART(MONTH, datecolumn))=11 THEN 5
              WHEN (DATEPART(MONTH, datecolumn))=10 THEN 6
              ELSE 0 END  
              ASC