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

MySQL-এ CASE WHEN, MIN(), MAX() ব্যবহার করে ডেট রেঞ্জ অনুযায়ী শর্তসাপেক্ষ ন্যূনতম ও সর্বোচ্চ মূল্য বের করা


MySQL-এ শর্তসাপেক্ষ এগ리게েশন: CURDATE() ডেট রেঞ্জের ভিতরে হলে LowPrice, বাহরে হলে HighPrice — তারপর MIN/MAX

যদি একটি টেবিলে স্ট্রম/অফার ডেট রেঞ্জ (StartDate, EndDate) এবং দুটি প্রাইস (LowerPrice, HigherPrice) থাকে, এবং বর্তমান তারিখ রেঞ্জের ভিতরে হলে LowerPrice, বাহরে হলে HigherPrice বিবেচনা করে সমগ্র টেবিলের ন্যূনতম ও সর্বোচ্চ মূল্য বের করতে CASE WHEN কে MIN() এবং MAX() দিয়ে র‍্যাপ করতে হয়।

সিনট্যাক্স

SELECT 
  MIN(CASE WHEN CURDATE() BETWEEN StartDate AND EndDate THEN LowerPrice ELSE HigherPrice END) AS MinimumValue,
  MAX(CASE WHEN CURDATE() BETWEEN StartDate AND EndDate THEN LowerPrice ELSE HigherPrice END) AS MaximumValue
FROM yourTableName;

উদাহরণ

টেবিল তৈরি

mysql> CREATE TABLE ConditionalSelect (
    -> Id INT NOT NULL AUTO_INCREMENT,
    -> StartDate DATETIME,
    -> EndDate DATETIME,
    -> LowerPrice INT,
    -> HigherPrice INT,
    -> PRIMARY KEY(Id)
    -> );

ডেটা ইনসার্ট

mysql> INSERT INTO ConditionalSelect(StartDate, EndDate, LowerPrice, HigherPrice) VALUES('2019-01-02', '2019-04-02', 5, 10);
mysql> INSERT INTO ConditionalSelect(StartDate, EndDate, LowerPrice, HigherPrice) VALUES('2019-04-02', '2019-04-20', 0, 20);
mysql> INSERT INTO ConditionalSelect(StartDate, EndDate, LowerPrice, HigherPrice) VALUES('2019-04-03', '2019-04-21', 0, 30);

সকল রেকর্ড

mysql> SELECT * FROM ConditionalSelect;
+----+---------------------+---------------------+------------+-------------+
| Id | StartDate           | EndDate             | LowerPrice | HigherPrice |
+----+---------------------+---------------------+------------+-------------+
| 1  | 2019-01-02 00:00:00 | 2019-04-02 00:00:00 | 5          | 10          |
| 2  | 2019-04-02 00:00:00 | 2019-04-20 00:00:00 | 0          | 20          |
| 3  | 2019-04-03 00:00:00 | 2019-04-21 00:00:00 | 0          | 30          |
+----+---------------------+---------------------+------------+-------------+

ধরি বর্তমান তারিখ ২০১৯-০১-১৫ (রেকর্ড ১-এর রেঞ্জের ভিতরে)

কোয়েরি

mysql> SELECT 
    -> MIN(CASE WHEN CURDATE() BETWEEN StartDate AND EndDate THEN LowerPrice ELSE HigherPrice END) AS MinimumValue,
    -> MAX(CASE WHEN CURDATE() BETWEEN StartDate AND EndDate THEN LowerPrice ELSE HigherPrice END) AS MaximumValue
    -> FROM ConditionalSelect;

ফলাফল

+--------------+--------------+
| MinimumValue | MaximumValue |
+--------------+--------------+
| 5            | 30           |
+--------------+--------------+

ব্যাখ্যা: রেকর্ড ১-এ CURDATE() রেঞ্জের ভিতরে → LowerPrice=5। রেকর্ড ২ ও ৩-এ বাহরে → HigherPrice=20, 30। MIN(5,20,30)=5, MAX(5,20,30)=30।

  1. MySQL-এ GROUP BY + MAX() ব্যবহার করে প্রতিটি গ্রুপের সর্বোচ্চ মান বের করা

  2. MySQL-এ টেবিলে নেই এমন মানগুলো কোয়েরি করে বের করা (UNION ALL + NOT EXISTS)

  3. MySQL-এ LPAD() এবং COALESCE() দিয়ে প্রিসিডিং জিরো সহ আইডি জেনারেট করা

  4. MySQL-এ ENUM টাইপ ব্যবহার করে কলাম মান সীমাবদ্ধ করা