Agarwal1984 Ответов: 2

Проблема сортировки дат в SQL server.


Привет,

Я хочу отобразить дату в соответствии с последним обновлением, но моя сортировка дат неверна.

Мне нужен результат:-

Months         Request
February 18	     4
January 18	     60
December 17	     32
November 17	     7


но результат:-
Months          Request
November 17	     7
January 18	     60
February 18	     4
December 17	     32


как отобразить данные в правильном формате (по убыванию месяца года)?
Пожалуйста, помогите мне.

заранее спасибо.

Анкит Агарвал
инженер-программист

Что я уже пробовал:

select  FORMAT(CreatedDateTime,'MMMM yy') as Months, count(*) as Request from LRequests 
group by FORMAT(CreatedDateTime,'MMMM yy')
order by FORMAT(CreatedDateTime,'MMMM yy') DESC

2 Ответов

Рейтинг:
2

Richard Deeming

Как сказал Грифф, вам нужно сортировать по значению даты, а не по форматированной дате. Но вы не можете этого сделать, если группируетесь по отформатированной дате.

Попробуйте сгруппировать по началу месяца и применить форматирование позже. Что-то вроде этого должно сработать:

WITH cte As
(
    SELECT
        DateFromParts(Year(CreatedDateTime), Month(CreatedDateTime), 1) As CreatedMonth,
        Count(*) As Request
    FROM
        LRequests
    GROUP BY
        DateFromParts(Year(CreatedDateTime), Month(CreatedDateTime), 1)
)
SELECT
    Format(CreatedMonth, 'MMMM yy') As Months,
    Request
FROM
    cte
ORDER BY
    CreatedMonth
;


Рейтинг:
18

OriginalGriff

Вы сортируете даты как строки, потому что это то, во что вы их преобразовали. Строки всегда сортируются в алфавитном порядке, а не в хронологическом.
Если вы хотите заказать по году, а затем по месяцу, не используйте строковую версию для вашего предложения ORDER BY:

ORDER BY CreatedDateTime DESC


Herman<T>.Instance

вот именно!