MySQL में वर्तमान तारीख के आधार पर दो तारीखों (शुरुआत/अंत) के बीच होने पर अलग कीमत (कम/अधिक) चुनकर, सभी रिकॉर्ड पर न्यूनतम और अधिकतम कीमत पाने के लिए CASE को MIN()/MAX() के साथ लपेटें।
सिंटैक्स
SELECT
MIN(CASE WHEN CURDATE() BETWEEN start_date AND end_date THEN low_price ELSE high_price END) AS min_price,
MAX(CASE WHEN CURDATE() BETWEEN start_date AND end_date THEN low_price ELSE high_price END) AS max_price
FROM yourTableName;
उदाहरण के साथ समझें
टेबल बनाएं:
CREATE TABLE ConditionalSelect (
Id INT NOT NULL AUTO_INCREMENT,
StartDate DATETIME,
EndDate DATETIME,
LowerPrice INT,
HigherPrice INT,
PRIMARY KEY(Id)
);
रिकॉर्ड डालें:
INSERT INTO ConditionalSelect(StartDate, EndDate, LowerPrice, HigherPrice)
VALUES('2019-01-02', '2019-04-02', 5, 10);
INSERT INTO ConditionalSelect(StartDate, EndDate, LowerPrice, HigherPrice)
VALUES('2019-04-02', '2019-04-20', 0, 20);
INSERT INTO ConditionalSelect(StartDate, EndDate, LowerPrice, HigherPrice)
VALUES('2019-04-03', '2019-04-21', 0, 30);
सभी रिकॉर्ड देखें:
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 |
+----+---------------------+---------------------+------------+-------------+
सशर्त MIN/MAX क्वेरी
(मान लें CURDATE() = '2019-04-05')
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() = '2019-04-05' के लिए:
| Id | रेंज | CURDATE() बीच में? | चुनी गई कीमत |
|---|---|---|---|
| 1 | 2019-01-02 से 2019-04-02 | नहीं (5 अप्रैल के बाद) | HigherPrice = 10 |
| 2 | 2019-04-02 से 2019-04-20 | हाँ | LowerPrice = 0 |
| 3 | 2019-04-03 से 2019-04-21 | हाँ | LowerPrice = 0 |
चुनी गई कीमतें: 10, 0, 0 → MIN = 0, MAX = 10
नोट: मूल लेख का आउटपुट 5, 30 दिखाता है जो अलग CURDATE() मान मानता है
बेहतर पठनीयता: CTE/सबक्वेरी
WITH priced AS (
SELECT
CASE WHEN CURDATE() BETWEEN StartDate AND EndDate THEN LowerPrice ELSE HigherPrice END AS effective_price
FROM ConditionalSelect
)
SELECT MIN(effective_price) AS min_price, MAX(effective_price) AS max_price
FROM priced;
व्यावहारिक उपयोग
- मौसमी मूल्यनिर्धारण (सीजन/ऑफ-सीजन दरें)
- प्रचार अवधि मूल्यनिर्धारण
- सदस्यता/गैर-सदस्य मूल्य
- समय-आधारित डायनामिक प्राइसिंग
नोट
BETWEENसमावेशी है (शुरुआत और अंत दोनों शामिल)CURDATE()केवल तारीख,NOW()दिनांक-समय- DATETIME कॉलम के साथ
DATE(StartDate)उपयोग करें यदि समय भाग अप्रासंगिक है - NULL तारीखों के लिए COALESCE/IFNULL जोड़ें