我有一个返回1-12个月的查询。 (INT)
有没有办法从本月开始订购结果?
示例
3
4
5
6
7
8
9
10
11
12
1
2
谢谢!
编辑:本月desc,我的意思是这个月。个月(GETDATE())答案 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