কম্পিউটার টিউটোরিয়াল

MySQL-এ ORDER BY CASE WHEN দিয়ে করেন্ট ডেটের ভিত্তিতে দিন ও মাস অনুযায়ী সাজানো


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);
  1. MySQL-এ DISTINCT এবং ORDER BY MAX() দিয়ে আইডি অনুযায়ী সাজানো

  2. MySQL কোয়েরিতে বছর, মাস ও দিন তুলনা করে মিলে যাওয়া রেকর্ড প্রদর্শন

  3. MySQL-এ ORDER BY Amount=0, Amount দিয়ে শূন্য মানগুলো শেষে পাঠানো

  4. MySQL-এ কারেন্ট ডেটের দিন ও মাস দিয়ে ডেট রেকর্ড ফিল্টার করা