반응형
최대 날짜를 기준으로 그룹화
이 코드를 실행할 때 문제가 발생합니다.
SELECT * FROM tblpm n
WHERE date_updated=(SELECT MAX(date_updated)
FROM tblpm GROUP BY control_number
HAVING control_number=n.control_number)
기본적으로 각 제어 번호에 대해 가장 최근 날짜를 반환하고 싶습니다.위의 쿼리는 올바른 출력을 반환하지만 출력이 표시될 때까지 37초 걸립니다.
위의 쿼리보다 더 빠르게 실행할 수 있는 sql 절이나 명령어가 있습니까?
잘 부탁드립니다.
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);
그 서브쿼리에서는 무리할 필요 없어...a 절이면 충분합니다.
SELECT * FROM tblpm n
WHERE date_updated=(SELECT MAX(date_updated)
FROM tblpm WHERE control_number=n.control_number)
또한 date_updated' 컬럼에 대한 인덱스가 있습니까?그것은 확실히 도움이 될 것이다.
가 그룹을 사용하지 않는 또 다른 방법은 다음과 같습니다.
SELECT * FROM tblpm n
WHERE date_updated=(SELECT date_updated FROM tblpm n
ORDER BY date_updated desc LIMIT 1)
빠르고 쉽게 다음 기능을 이용할 수 있습니다.
SELECT * FROM tblpm n
FROM tblpm GROUP BY control_number
HAVING date_updated=MAX(date_updated);
의 맥락에서HAVING
,MAX
각 그룹의 최대값을 찾습니다.각 그룹의 최신 항목만 다음을 만족합니다.date_updated=max(date_updated)
그룹 내에서 최신 동점이 있을 경우, 두 팀 모두 합격을 하게 됩니다.HAVING
필터, 단GROUP BY
반환되는 테이블에는 1개만 표시됩니다.
언급URL : https://stackoverflow.com/questions/18221999/group-by-having-max-date
반응형
'source' 카테고리의 다른 글
vuejs v-for에 :key 속성이 필요한 이유는 무엇입니까? (0) | 2023.01.29 |
---|---|
PHP 기본 도메인/url을 가져오는 방법 (0) | 2023.01.29 |
PHP를 사용하여 문자열에서 마지막 쉼표를 제거하려면 어떻게 해야 합니까? (0) | 2023.01.29 |
사설 컨스트럭터에 테스트 적용 범위를 추가하려면 어떻게 해야 합니까? (0) | 2023.01.29 |
MySQL 일치 관련성 점수가 "DOUBLE 값이 범위를 벗어났습니다" 오류를 발생시킵니다. (0) | 2023.01.29 |