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।