MySQL ЗАКАЗАТЬ ПО СЛУЧАЮ Дата ASC / DESC - PullRequest
0 голосов
/ 15 января 2019

У меня есть эти записи на моей таблице:

ID  Win    Date
1   NULL   2019-01-15
2   12     2019-01-10
3   NULL   2019-01-12
4   513    2019-01-14

Я хочу, чтобы заказ был: выигрыш, который является нулевым первым, упорядоченный по дате asc, и выигрыш, который не является нулевым после, упорядоченный по дате desc

Таким образом, порядок будет: 3, 1, 4, 2

Как мне добиться этого, используя заказ в каждом конкретном случае или любым другим способом?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы должны использовать ORDER BY CASE ... здесь:

SELECT * FROM ...
ORDER BY
  NOT ISNULL(Win),
  CASE
    WHEN Win IS NULL
    THEN `Date`
    ELSE DATEDIFF('9999-01-01', `Date`)
  END

Это должно быть с датами до 9999-01-01. Отрегулируйте это значение, если у вас будут более поздние даты.

0 голосов
/ 15 января 2019

Попробуйте это

order by iif(win is null,1,0) DESC, Date DESC

Извините, неправильно прочитал предполагаемый порядок, попробуйте что-то вроде этого

Order by iif(win is null,1,0) DESC,DateDiff(Day,'1900-01-01',Date) * iif(win is null,1,-1) DESC

идея состоит в том, чтобы получить значение, которое вы можете сделать отрицательным, используя оператор if

...