CASE स्टेटमेंट का उपयोग करना एक अच्छा विकल्प है। UNION का उपयोग न करें। आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ShippingDate DATETIME
);
टेबल में कुछ रिकॉर्ड डालें:
mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2019-04-21');
mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2019-01-01');
mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2019-05-11');
mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2018-12-31');
mysql> INSERT INTO DemoTable(ShippingDate) VALUES('2019-02-18');
टेबल से सभी रिकॉर्ड प्रदर्शित करें:
mysql> SELECT * FROM DemoTable;
आउटपुट:
+----+---------------------+ | Id | ShippingDate | +----+---------------------+ | 1 | 2019-04-21 00:00:00 | | 2 | 2019-01-01 00:00:00 | | 3 | 2019-05-11 00:00:00 | | 4 | 2018-12-31 00:00:00 | | 5 | 2019-02-18 00:00:00 | +----+---------------------+
ORDER BY CASE का उपयोग करके SELECT क्रम को बनाए रखने के लिए क्वेरी:
mysql> SELECT * FROM DemoTable ORDER BY CASE WHEN ShippingDate < CURDATE() THEN ShippingDate ELSE CURDATE() END DESC, ShippingDate ASC;
आउटपुट:
+----+---------------------+ | Id | ShippingDate | +----+---------------------+ | 3 | 2019-05-11 00:00:00 | | 1 | 2019-04-21 00:00:00 | | 5 | 2019-02-18 00:00:00 | | 2 | 2019-01-01 00:00:00 | | 4 | 2018-12-31 00:00:00 | +----+---------------------+