MySQL-এ DATEDIFF() ফাংশন এবং ORDER BY ক্লজ ব্যবহার করে বর্তমান তারিখ থেকে প্রতিটি ডিউ ডেটার পার্থক্য বের করে এবং তার অনুযায়ী সর্ট করা যায়।
বর্তমান তারিখ
mysql> SELECT NOW(); +---------------------+ | NOW() | +---------------------+ | 2019-06-09 21:08:16 | +---------------------+ 1 row in set (0.00 sec)
টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> DueDate DATETIME
-> );
Query OK, 0 rows affected (0.62 sec)
mysql> INSERT INTO DemoTable(DueDate) VALUES('2019-06-12');
mysql> INSERT INTO DemoTable(DueDate) VALUES('2019-06-01');
mysql> INSERT INTO DemoTable(DueDate) VALUES('2019-06-05');
mysql> INSERT INTO DemoTable(DueDate) VALUES('2019-06-10');
mysql> INSERT INTO DemoTable(DueDate) VALUES('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 | +----+---------------------+ 5 rows in set (0.00 sec)
পার্থক্য সহ সর্ট করা (ভবিষ্যতের তারিখ আগে, অতীতের পরে)
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 | +----+---------------------+------+ 5 rows in set (0.00 sec)
ব্যাখ্যা:
DATEDIFF(DueDate, CURDATE())— DueDate থেকে বর্তমান তারিখ বিয়োগ করে দিনের পার্থক্য (পজিটিভ = ভবিষ্যত, নেগেটিভ = অতীত)।CASE WHEN t < 0 THEN 1 ELSE 0 END— অতীতের তারিখ (t < 0) কে ১, ভবিষ্যতের কে ০ দিয়ে গ্রুপ করে।ORDER BYঅরোহী ক্রমে সাজায়, তাই ০ (ভবিষ্যত) আগে আসে।t— একই গ্রুপের ভিতরে পার্থক্য অনুযায়ী সর্ট (সর্বোচ্চ അടশের তারিখ প্রথমে)।