CASE WHEN দিয়ে ভবিষ্যৎ তারিখকে আগে, অতীত তারিখকে পরে সাজানো
MySQL-এ ORDER BY CASE WHEN ... THEN 0 ELSE 1 END, DueDate প্যাটার্ন ব্যবহার করে আজকের তারিখের পরের (ভবিষ্যৎ) রেকর্ডগুলোকে আগে, আগের (অতীত) রেকর্ডগুলোকে পরে সাজানো যায়।
টেবিল ও ডেটা (কারেন্ট ডেটা: 2019-07-22)
mysql> CREATE TABLE DemoTable (DueDate DATE);
mysql> INSERT INTO DemoTable VALUES('2019-03-10'), ('2019-08-25'), ('2019-06-01'), ('2019-12-31');
সব রেকর্ড
+------------+ | DueDate | +------------+ | 2019-03-10 | | 2019-08-25 | | 2019-06-01 | | 2019-12-31 | +------------+
ORDER BY CASE WHEN কোয়েরি
mysql> SELECT * FROM DemoTable ORDER BY CASE WHEN DueDate > CURDATE() THEN 0 ELSE 1 END, DueDate;
+------------+ | DueDate | +------------+ | 2019-08-25 | -- ভবিষ্যৎ (আজ 2019-07-22) | 2019-12-31 | -- ভবিষ্যৎ | 2019-03-10 | -- অতীত | 2019-06-01 | -- অতীত +------------+
ব্যাখ্যা
CASE WHEN DueDate > CURDATE() THEN 0 ELSE 1 END— ভবিষ্যৎ তারিখের জন্য ০, অতীত/আজকের জন্য ১।ORDER BY ... 0, 1— ০ আগে আসে (ভবিষ্যৎ প্রথমে), তারপর ১ (অতীত)।DueDate— একই গ্রুপের মধ্যে তারিখ অনুযায়ী ASC সাজানো।
বিকল্প: UNION ALL (দুটি আলাদা কোয়েরি)
(SELECT * FROM DemoTable WHERE DueDate > CURDATE() ORDER BY DueDate) UNION ALL (SELECT * FROM DemoTable WHERE DueDate <= CURDATE() ORDER BY DueDate);