SQL ORDER BY месяцев, начиная с этого месяца - PullRequest
0 голосов
/ 11 марта 2011

У меня есть запрос, который возвращает месяцы 1-12.(INT)

Есть ли способ упорядочить результаты, начиная с этого месяца?

Пример

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

Спасибо!

РЕДАКТИРОВАТЬ: Пов этом месяце, я имею в виду этот фактический месяц.МЕСЯЦ (GetDate ())

Ответы [ 6 ]

3 голосов
/ 11 марта 2011

Попробуйте простую математику по порядку: если месяц меньше, чем текущий, добавить 12, не уверен, что скажется на производительности ...

Order By Case When month(dateColumn) < month(GetDate()) Then month(dateColumn) +12
ELSE month(dateColumn) END
2 голосов
/ 11 марта 2011

Вы можете добавить туда год для сортировки. Заставьте их вывести что-то вроде:

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

Псевдокод:

WHERE year >= 2010 AND month >= 3

Не уверен, что ваш запрос или данные, подтверждающие его.

1 голос
/ 20 марта 2014

Предположим, у вас есть столбец месяца в вашей таблице с 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
0 голосов
/ 01 апреля 2016

Гораздо лучше с точки зрения стоимости исполнения:

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
0 голосов
/ 11 марта 2011

Если вы не добавите годы, это невозможно. Причина заключается в том, что невозможно определить, какой январь или какой-либо месяц был первым.

Единственное решение, которое вам нужно - просто заказать их сначала по YEAR, затем по MONTH.

Таким образом, если вы не измените поле в формат DATE или не включите столбец ГОД, вы ничего не сможете сделать. Если вы не хотите расположить их по ID; который был введен первым.

Короче говоря: нет YEAR = никак.

0 голосов
/ 11 марта 2011

Аналогично ответу Брэда, добавьте столбец года, затем

...
ORDER BY year, month 

Используйте модификаторы сортировки ASCending или DESCending в зависимости от того, что именно вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...