Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เลือกแบบมีเงื่อนไขระหว่างวันที่ใน MySQL สำหรับค่าสูงสุดและต่ำสุดของราคาที่กำหนดไว้ในตาราง?


คุณต้องใช้คำสั่ง CASE เพื่อเลือกเงื่อนไขระหว่างวันที่เพื่อหาราคาต่ำสุดและสูงสุด สรุปคำสั่ง CASE ด้วยฟังก์ชันการรวม MIN() และ MAX() ไวยากรณ์มีดังนี้:

SELECTMIN(CASE WHEN CURDATE() BETWEEN yourStartDateColumnName และ yourEndDateColumnName แล้ว yourLowPriceColumnName ELSE your HighPriceColumnName END) AS anyVariableName,MAX(CASE WHEN CURDATE() BETWEEN yourStartDateColumnColumnName your PREPreVariableName your FROM THENDID; 

เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้:

mysql> สร้างตาราง ConditionalSelect -> ( -> Id int ไม่ใช่ NULL AUTO_INCREMENT, -> วันที่และเวลาเริ่มต้น, -> วันที่สิ้นสุดวันที่, -> ราคาที่ต่ำกว่า int, -> HigherPrice int, -> คีย์หลัก(Id) -> ); แบบสอบถามตกลง 0 แถวได้รับผลกระทบ (0.69 วินาที)

แทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้:

mysql> แทรกลงในค่า ConditionalSelect(StartDate,EndDate,LowerPrice,HigherPrice) ('2019-01-02','2019-04-02',5,10);Query OK, 1 แถวได้รับผลกระทบ (0.12 วินาที) mysql> แทรกลงใน ConditionalSelect (StartDate,EndDate,LowerPrice,HigherPrice) ค่า ('2019-04-02','2019-04-20',0,20); Query OK, 1 แถวได้รับผลกระทบ (0.17 วินาที) mysql> แทรก เป็น ConditionalSelect(StartDate,EndDate,LowerPrice,HigherPrice) values('2019-04-03','2019-04-21',0,30);Query OK, 1 แถวได้รับผลกระทบ (0.17 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้:

mysql> เลือก *จาก ConditionalSelect;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+---------------------------+------------------- ---+------------+-------------+| รหัส | StartDate | EndDate | ราคาที่ต่ำกว่า | ราคาที่สูงขึ้น |+----+---------------------+-------------------- ---------------+-------------+| 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 |+----+---------------------+-------------------------- ++------------+-----------+3 แถวในชุด (0.00 วินาที)

นี่คือข้อความค้นหาเพื่อเลือกราคาต่ำสุดและสูงสุดระหว่างวันที่:

mysql> SELECT -> MIN(CASE WHEN CURDATE() BETWEEN StartDate AND EndDate then Lower Price ELSE HigherPrice END) AS MinimumValue, -> MAX(CASE WHEN CURDATE() BETWEEN StartDate AND EndDate then Lower Price ELSE HigherPrice END) AS MaximumValue -> จาก ConditionalSelect;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+--------------+--------------+| ค่าต่ำสุด | ค่าสูงสุด |+--------------+-------------+| 5 | 30 |+--------------+--------------------- +1 แถวในชุด (0.00 วินาที)