sql 문의 변수가 쿼리를 중단시킵니다.
다음 sql 문은 그것이 무엇을 해야 하는지를 전달합니다.정의된 기간 내의 최소 값입니다.
select value, datetime from Schuppen
where (value = (select min(value) from Schuppen
where (measure = 'temp')
and datetime between '2018-11-01 00:00:00' and '2018-11-02 00:00:00'))
and datetime between '2018-11-01 00:00:00' and '2018-11-02 00:00:00';
변수를 사용할 때 하드코드된 날짜 대신 문이 걸려 있습니다.
set @startdate = cast('2018-11-01 00:00:00' as datetime);
select value, datetime from Schuppen
where (value = (select min(value) from Schuppen
where (measure = 'temp')
and datetime between @startdate and '2018-11-02 00:00:00'))
and datetime between '2018-11-01 00:00:00' and '2018-11-02 00:00:00';
나는 왜 이 문장이 나의 maria db 버전 10.1.26-maria DB-0+deb9u1에 맞지 않는지 궁금합니다.
mysql 콘솔을 통해 시도했습니다.
mysql --user=XXXX --password=XXXX Outdoor-Air
...
Your MariaDB connection id is 194
Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1
...
MariaDB [Outdoor-Air]> set @startdate = cast('2018-11-01 00:00:00' as datetime);
Query OK, 0 rows affected (0.00 sec)
MariaDB [Outdoor-Air]> select @startdate;
+---------------------+
| @startdate |
+---------------------+
| 2018-11-01 00:00:00 |
+---------------------+
1 row in set (0.01 sec)
MariaDB [Outdoor-Air]> select value, datetime from Schuppen where (value = (select min(value) from Schuppen where (measure = 'temp') and datetime between @startdate and '2018-11-02 00:00:00')) and datetime between '2018-11-01 00:00:00' and '2018-11-02 00:00:00';
이제 성명서가 걸려있습니다.
SELECT `value`, `datetime`
FROM Schuppen
WHERE measure = 'temp'
AND `datetime` >= '2018-11-01'
AND `datetime` < '2018-11-01' + INTERVAL 1 DAY
ORDER BY `value` ASC
LIMIT 1;
그리고 이것이 도움이 될 것입니다.
INDEX(measure, datetime, value)
이 제형과 당신의 제형의 잠재적인 차이점은 다음과 같습니다.가장 낮은 값이 해당 날짜에 두 번 이상 발생하는 경우에는 행이 하나만 표시됩니다.
두 쿼리 모두 viz.SET
그리고.SELECT
문은 동일한 세션 내에서 실행됩니다.@startdate
는 단일 세션에서만 지속됩니다.
이 두 개의 쿼리를 하나의 쿼리로 변환할 수도 있습니다.CROSS JOIN
Derived Table과 함께.
SELECT value,
`datetime`
FROM Schuppen
CROSS JOIN (SELECT @startdate := cast('2018-11-01 00:00:00' as datetime)) vars
WHERE ( value = (SELECT Min(value)
FROM Schuppen
WHERE ( measure = 'temp' )
AND `datetime` BETWEEN
@startdate AND '2018-11-02 00:00:00') )
AND `datetime` BETWEEN '2018-11-01 00:00:00' AND '2018-11-02 00:00:00';
언급URL : https://stackoverflow.com/questions/53460954/variables-in-sql-statement-make-query-hang
'programing' 카테고리의 다른 글
베어러TokenAccessDeniedHandler 클래스 정의를 찾을 수 없습니다. (0) | 2023.10.11 |
---|---|
md-table - 열 너비 업데이트 방법 (0) | 2023.10.11 |
배열을 필터 함수로 나눕니다. (0) | 2023.10.11 |
setInterval loop을 즉시 시작하는 방법은? (0) | 2023.10.11 |
중앙 하나와 오른쪽/왼쪽 정렬 다른 플렉스박스 요소 (0) | 2023.10.11 |