2015-06-03 16 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 

bene che questo lavoro di ricerca, ma voglio ordinare la items dalla data di scadenza in ASC in un caso e DESC in una case.How per raggiungere questo obiettivo dovrebbe essere qualche cosa come questaMarchio caso mysql

interrogazione 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

Puoi darci qualche input e output di esempio? –

risposta

3

Ecco una forma più generica di fare la cernita, in cui è possibile utilizzare più le condizioni per l'ordinazione di diversa data

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

Prova questo:

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)) 

Tutti i record:

  1. avere expiry_date_casepassatoCURDATE() arriverà prima,
  2. poi vengono NULL record, seguito da,
  3. record avendo expiry_date_case < CURDATE().

Gruppo [1] record saranno in ordine crescente (all'interno del proprio gruppo), mentre il gruppo [3] record saranno in ordine decrescente.

Demo here

Problemi correlati