[SQL] GROUP BY는 MAX 날짜를 가진
SQLGROUP BY는 MAX 날짜를 가진
이 코드를 실행하는 문제가있다 :
SELECT * FROM tblpm n
WHERE date_updated=(SELECT MAX(date_updated)
FROM tblpm GROUP BY control_number
HAVING control_number=n.control_number)
기본적으로, 각 컨트롤 번호에 대한 가장 최근의 날짜를 반환합니다. 반환 위의 쿼리는 출력을 수정하지만 37secs 걸립니다. 출력은 도시 된 전.
위의 쿼리를보다 빠르게 실행할 수있는 다른 SQL 절 또는 명령이 있습니까?
미리 감사드립니다.
해결법
-
==============================
1.WHERE 절에 하위 쿼리를 넣고 n.control_number 수단에 제한이 서브 쿼리 여러 번 실행됩니다. 이 상관 하위 쿼리라고하며, 종종 성능 살인자입니다.
WHERE 절에 하위 쿼리를 넣고 n.control_number 수단에 제한이 서브 쿼리 여러 번 실행됩니다. 이 상관 하위 쿼리라고하며, 종종 성능 살인자입니다.
그것은 관리 번호 당 최대 날짜를 얻기 위해, FROM 절에 한 번 하위 쿼리를 실행하는 것이 좋습니다.
SELECT n.* FROM tblpm n INNER JOIN ( SELECT control_number, MAX(date_updated) AS date_updated FROM tblpm GROUP BY control_number ) AS max USING (control_number, date_updated);
-
==============================
2.그 하위 쿼리 그룹에 대한 필요가 없습니다 ... 조항이 충분할 경우 :
그 하위 쿼리 그룹에 대한 필요가 없습니다 ... 조항이 충분할 경우 :
SELECT * FROM tblpm n WHERE date_updated=(SELECT MAX(date_updated) FROM tblpm WHERE control_number=n.control_number)
또한, 당신은 'date_updated'컬럼에 인덱스를해야합니까? 그건 확실히 도움이 될 것이다.
-
==============================
3.그룹화를 사용하지 않는 또 다른 방법 :
그룹화를 사용하지 않는 또 다른 방법 :
SELECT * FROM tblpm n WHERE date_updated=(SELECT date_updated FROM tblpm n ORDER BY date_updated desc LIMIT 1)
-
==============================
4.빠르고 쉬운 갖는 :
빠르고 쉬운 갖는 :
SELECT * FROM tblpm n FROM tblpm GROUP BY control_number HAVING date_updated=MAX(date_updated);
HAVING의 맥락에서, MAX는 각 그룹의 최대를 찾습니다. 각 그룹의 최신 항목이 date_updated 만족 = 최대 (date_updated). 그룹 내 최신의 넥타이가 있다면, 모두가 하나가 반환 된 테이블에 나타납니다 의한 HAVING 필터하지만, GROUP을 전달합니다.
from https://stackoverflow.com/questions/18221999/group-by-having-max-date by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 그 합류 값의 합을 SQL 업데이트 (0) | 2020.06.24 |
---|---|
[SQL] 어떻게 오라클 데이터베이스에 "&"같은 특수 문자를 입력하려면? [복제] (0) | 2020.06.24 |
[SQL] 모든 SQL 서버 외래 키가 일치하는 인덱스가해야 하는가? (0) | 2020.06.24 |
[SQL] 어떻게 SQL 쿼리에서 처음이자 마지막 기록을 얻으려면? (0) | 2020.06.24 |
[SQL] 데이터베이스에이 개 분야에 대한 별개의 SQL (0) | 2020.06.24 |