Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में CASE से तारीखों के बीच सशर्त MIN/MAX कीमत कैसे पाएं?

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() बीच में?चुनी गई कीमत
12019-01-02 से 2019-04-02नहीं (5 अप्रैल के बाद)HigherPrice = 10
22019-04-02 से 2019-04-20हाँLowerPrice = 0
32019-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 जोड़ें
  1. - MySQL में टेबल में मौजूद न होने वाले मानों को कैसे क्वेरी करें?

    MySQL में किसी टेबल में मौजूद नहीं होने वाले मानों को खोजने के लिए, UNION ALL के साथ WHERE NOT EXISTS या NOT IN का उपयोग करें। यह गैप विश्लेषण या मिसिंग सीक्वेंस खोजने के लिए उपयोगी है। उदाहरण: मिसिंग ऑटो-इन्क्रीमेंट मान खोजना ऑटो-इन्क्रीमेंट टेबल बनाएं: mysql> CREATE TABLE DemoTable1918 (

  1. - MySQL में LPAD और INSERT INTO SELECT का उपयोग करके अग्रणी शून्य के साथ मान डालें

    MySQL में अग्रणी शून्य के साथ क्रमिक ID उत्पन्न करना LPAD() फ़ंक्शन और INSERT INTO SELECT का उपयोग करके आप एक कॉलम में अग्रणी शून्य के साथ स्वरूपित मान (जैसे 001, 002, 003) स्वचालित रूप से उत्पन्न और डाल सकते हैं। टेबल बनाना ); Query OK, 0 rows affected (0.00 sec) LPAD के साथ INSERT INTO SELECT क

  1. - MySQL में कॉलम मानों के लिए ENUM कैसे सेट करें?

    ENUM कॉलम के साथ टेबल बनाना टेबल बनाते समय ENUM प्रकार निर्दिष्ट करें: ); रिकॉर्ड डालना INSERT INTO DemoTable2019 VALUES (45, Second); सभी रिकॉर्ड देखना SELECT * FROM DemoTable2019; +--------------+---------------+ | StudentMarks | StudentStatus | +--------------+---------------+ | 96