MySQL में देय तिथियों (Due Dates) का वर्तमान तिथि से अंतर निकालकर उन्हें क्रमबद्ध करने के लिए DATEDIFF() और ORDER BY के साथ CASE अभिव्यक्ति का उपयोग किया जाता है।
वर्तमान तिथि जांचना
mysql> SELECT NOW();
+---------------------+ | now() | +---------------------+ | 2019-06-09 21:08:16 | +---------------------+
उदाहरण के लिए टेबल बनाना
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
DueDate DATETIME
);
डेटा डालना
mysql> INSERT INTO DemoTable(DueDate) VALUES('2019-06-12'), ('2019-06-01'), ('2019-06-05'), ('2019-06-10'), ('2019-06-11');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable;
आउटपुट
+----+---------------------+ | Id | DueDate | +----+---------------------+ | 1 | 2019-06-12 00:00:00 | | 2 | 2019-06-01 00:00:00 | | 3 | 2019-06-05 00:00:00 | | 4 | 2019-06-10 00:00:00 | | 5 | 2019-06-11 00:00:00 | +----+---------------------+
तिथि अंतर के साथ क्रमबद्ध करना (भविष्य की तिथियाँ पहले, फिर अतीत की)
mysql> SELECT Id, DueDate, DATEDIFF(DueDate, CURDATE()) AS t
-> FROM DemoTable
-> ORDER BY CASE WHEN t < 0 THEN 1 ELSE 0 END, t;
आउटपुट
+----+---------------------+------+ | Id | DueDate | t | +----+---------------------+------+ | 4 | 2019-06-10 00:00:00 | 1 | | 5 | 2019-06-11 00:00:00 | 2 | | 1 | 2019-06-12 00:00:00 | 3 | | 2 | 2019-06-01 00:00:00 | -8 | | 3 | 2019-06-05 00:00:00 | -4 | +----+---------------------+------+
व्याख्या: CASE WHEN t < 0 THEN 1 ELSE 0 END भूतपूर्व तिथियों (ऋणात्मक अंतर) को 1 और भविष्य की तिथियों को 0 देता है। ASC क्रम में 0 पहले आते हैं, इसलिए भविष्य की तिथियाँ पहले आती हैं, फिर अंतर के अनुसार क्रमबद्ध।