source

최대 날짜를 기준으로 그룹화

manycodes 2023. 1. 29. 20:19
반응형

최대 날짜를 기준으로 그룹화

이 코드를 실행할 때 문제가 발생합니다.

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

반응형