Computer >> Máy Tính >  >> Lập trình >> MySQL

Lựa chọn có điều kiện giữa các ngày trong MySQL cho các giá trị tối đa và tối thiểu của giá đặt trong bảng?

Bạn cần sử dụng câu lệnh CASE để chọn có điều kiện giữa các ngày để tìm giá tối thiểu và tối đa. Kết thúc câu lệnh CASE với hàm tổng hợp MIN () và MAX (). Cú pháp như sau:

SELECT
MIN(CASE WHEN CURDATE() BETWEEN yourStartDateColumnName AND yourEndDateColumnName THEN yourLowPriceColumnName ELSE yourHighPriceColumnName END) AS anyVariableName,

MAX(CASE WHEN CURDATE() BETWEEN yourStartDateColumnName AND yourEndDateColumnName THEN yourLowPriceColumnName ELSE yourHighPriceColumnName END) AS anyVariableName FROM yourTableName;

Để hiểu cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau:

mysql> create table ConditionalSelect
   -> (
   -> Id int NOT NULL AUTO_INCREMENT,
   -> StartDate datetime,
   -> EndDate datetime,
   -> LowerPrice int,
   -> HigherPrice int,
   -> PRIMARY KEY(Id)
   -> );
Query OK, 0 rows affected (0.69 sec)

Chèn một số bản ghi trong bảng bằng lệnh chèn. Truy vấn như sau:

mysql> insert into ConditionalSelect(StartDate,EndDate,LowerPrice,HigherPrice) values('2019-01-02','2019-04-02',5,10);
Query OK, 1 row affected (0.12 sec)
mysql> insert into ConditionalSelect(StartDate,EndDate,LowerPrice,HigherPrice) values('2019-04-02','2019-04-20',0,20);
Query OK, 1 row affected (0.17 sec)
mysql> insert into ConditionalSelect(StartDate,EndDate,LowerPrice,HigherPrice) values('2019-04-03','2019-04-21',0,30);
Query OK, 1 row affected (0.17 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau:

mysql> select *from ConditionalSelect;

Sau đây là kết quả:

+----+---------------------+---------------------+------------+-------------+
| 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 |
+----+---------------------+---------------------+------------+-------------+
3 rows in set (0.00 sec)

Đây là truy vấn để chọn giá tối thiểu và giá tối đa giữa các ngày:

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;

Sau đây là kết quả:

+--------------+--------------+
| MinimumValue | MaximumValue |
+--------------+--------------+
|            5 |           30 |
+--------------+--------------+
1 row in set (0.00 sec)