Computer >> 컴퓨터 >  >> 프로그램 작성 >> MySQL

테이블에 설정된 가격의 최대값과 최소값에 대해 MySQL의 날짜 사이에 조건부 선택이 있습니까?

<시간/>

최소 및 최대 가격을 찾기 위해 날짜 사이의 조건부 선택에 CASE 문을 사용해야 합니다. CASE 문을 집계 함수 MIN() 및 MAX()로 마무리합니다. 구문은 다음과 같습니다.

SELECTMIN(CASE WHEN CURDATE() BETWEEN yourStartDateColumnName AND yourEndDateColumnName THEN yourLowPriceColumnName ELSE yourHighPriceColumnName END) AS anyVariableName,MAX(CASE WHEN CURDATE() BETWEEN yourStartDateColumnName AND yourEndDateColumnName yourStartDateColumnName AND yourEndDateColumnName yourVariableName theN yourLowPriceColumnName 

위의 구문을 이해하기 위해 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.

mysql> 테이블 생성 ConditionalSelect -> ( -> Id int NOT NULL AUTO_INCREMENT, -> StartDate datetime, -> EndDate datetime, -> LowerPrice int, -> HigherPrice int, -> PRIMARY KEY(Id) -> ); 쿼리 확인, 영향을 받는 행 0개(0.69초)

삽입 명령을 사용하여 테이블에 일부 레코드를 삽입하십시오. 쿼리는 다음과 같습니다.

mysql> ConditionalSelect(StartDate,EndDate,LowerPrice,HigherPrice) values('2019-01-02','2019-04-02',5,10)에 삽입, 쿼리 확인, 1행 영향(0.12초) mysql> Insert into ConditionalSelect(StartDate,EndDate,LowerPrice,HigherPrice) values('2019-04-02','2019-04-20',0,20);Query OK, 영향을 받는 행 1개(0.17초)mysql> insert into ConditionalSelect(StartDate,EndDate,LowerPrice,HigherPrice) values('2019-04-03','2019-04-21',0,30);쿼리 OK, 영향을 받는 1행(0.17초)

select 문을 사용하여 테이블의 모든 레코드를 표시합니다. 쿼리는 다음과 같습니다.

mysql> Select *from ConditionalSelect;

다음은 출력입니다.

+----+---------------------+------------------- --+------------+-------------+| 아이디 | 시작일 | 종료일 | 낮은 가격 | 더 높은 가격 |+----+---------------------+-------------------- -+------------+-------------+| 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 LowerPrice ELSE HigherPrice END) AS MinimumValue, -> MAX(CASE WHEN CURDATE() BETWEEN StartDate AND EndDate THEN LowerPrice ELSE HigherPrice END) AS MaximumValue> ConditionalSelect에서;

다음은 출력입니다.

+--------------+--------------+| 최소값 | 최대값 |+--------------+--------------+| 5 | 30 |+--------------+--------------+1 행 세트(0.00초)