У меня есть список, который я должен упорядочить по нескольким столбцам в SQL. Сначала я должен упорядочить список по дате, а затем по критериям заказа. Я сделал скрипт SQL: http://sqlfiddle.com/#!9/c135c6/1 с некоторыми тестовыми данными.

Список должен быть упорядочен по StatusDate, потому что вверху списка должны быть самые последние элементы. Но он также должен быть упорядочен по OrderCriteria, потому что сначала должны появиться элементы с OrderCriteria 0, а затем с OrderCriteria 1.

На этом скриншоте показано, какой должен быть правильный порядок.

enter image description here

Сначала все элементы с самой последней датой, но сначала OrderCriteria 0, а затем, где OrderCriteria равен 1.

Правильный порядок должен быть таким: Я добавил в скрипт SQL. Я попытался сделать заказ по StatusDate, который правильно упорядочивает товары, но не учитывает OrderCriteria. Заказывается только по дате. Я пытался заказать

ORDER BY  StatusDate DESC, OrderCriteria asc

Без OrderCriteria. Но все равно не получил желаемого результата. Подскажите, пожалуйста, как решить эту проблему?

0
Kar 13 Мар 2018 в 21:51

2 ответа

Лучший ответ

Похоже, вы хотите, чтобы дата в StatusDate имела приоритет. Затем в дате используйте OrderCriteria и компонент времени.

Так:

ORDER BY DATE(StatusDate) DESC, OrderCriteria asc, StatusDate DESC

Вот скрипт SQL.

Извлечение даты из даты / времени зависит от базы данных. Ваш SQL Fiddle - это MySQL, поэтому я использовал синтаксис для этой базы данных.

В SQL Server это будет:

ORDER BY CONVERT(DATE, StatusDate) DESC, OrderCriteria asc, StatusDate DESC
0
Gordon Linoff 14 Мар 2018 в 03:07

SQL DEMO

На сервере ms sql вы можете использовать это:

Select * from test 
ORDER BY cast(StatusDate as date) DESC, OrderCriteria asc, StatusDate DESC
0
Md. Suman Kabir 13 Мар 2018 в 19:36