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

ऊपर क्वेरी काम के ठीक में छँटाई, लेकिन मैं एक case.How में एक मामला और DESC में एएससी में समाप्ति की तारीख से items सॉर्ट करने के लिए इस प्राप्त करना चाहते हैं यह इसमामले mysql

जैसे कुछ बात होनी चाहिए

छद्म क्वेरी

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

आप हमें कुछ नमूना इनपुट और आउटपुट दे सकते हैं के अलावा अन्य आदेश देने के लिए कई शर्तों का उपयोग कर सकते करने का एक अधिक सामान्य रूप है? –

उत्तर

3

यहाँ छंटाई, जहाँ आप तारीख

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

इस प्रयास करें:

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

सभी रिकॉर्ड:

  1. होने expiry_date_caseपिछलेCURDATE() पहले आ जाएगा,
  2. तो NULL रिकॉर्ड आते हैं, के बाद,
  3. रिकॉर्ड expiry_date_case < CURDATE() रही है।

समूह [1] रिकॉर्ड, आरोही क्रम (अपने स्वयं के समूह के भीतर) में होना है, जबकि समूह [3] रिकॉर्ड अवरोही क्रम में होगा।

Demo here

संबंधित मुद्दे