2015-06-03 14 views
7
SELECT * 
FROM case_study 
ORDER BY CASE 

WHEN expiry_date_case > CURDATE() THEN 3 

WHEN expiry_date_case IS NULL THEN 2 

WHEN expiry_date_case < CURDATE() THEN 1 

END DESC 

Powyższa praca kwerendy w porządku, ale chcę, aby posortować według daty wygaśnięcia items w ASC w jednym przypadku i DESC w jednym case.How do współpracy to powinno być coś, jak tosortowania w przypadku MySQL

zapytanie pseudo

WHEN expiry_date_case > CURDATE() THEN 3 expiry_date_case ASC 

WHEN expiry_date_case IS NULL THEN 2 

WHEN expiry_date_case < CURDATE() THEN 1 expiry_date_case DESC 
+0

możesz dać nam jakąś przykładową wejście i wyjście? –

Odpowiedz

3

Tutaj jest bardziej ogólna forma robi sortowania, gdzie można korzystać z wielu warunków zamówienia inne niż daty

SELECT * 
FROM case_study 
ORDER BY 
CASE 
    WHEN expiry_date_case > CURDATE() THEN 3 
    WHEN expiry_date_case IS NULL THEN 2 
    WHEN expiry_date_case < CURDATE() THEN 1 
END DESC, 
case when expiry_date_case > CURDATE() then expiry_date_case end, 
case when expiry_date_case < CURDATE() then expiry_date_case end desc 
3

Spróbuj tego:

SELECT * 
FROM case_study 
ORDER BY CASE 
      WHEN expiry_date_case > CURDATE() THEN 3 
      WHEN expiry_date_case IS NULL THEN 2 
      WHEN expiry_date_case < CURDATE() THEN 1 
     END DESC, 
     ABS(DATEDIFF(CURDATE(), expiry_date_case)) 

Wszystkie wyniki:

  1. mający expiry_date_caseprzeszłośćCURDATE() przyjdzie pierwszy,
  2. następnie przyjść NULL rekordy, a następnie,
  3. rekordy posiadające expiry_date_case < CURDATE().

Grupa [1] zapisy będą w kolejności rosnącej (w obrębie własnej grupy), natomiast grupa [3] zapisy będą w kolejności malejącej.

Demo here

Powiązane problemy