>데이터 베이스 >MySQL 튜토리얼 >SQL의 `GROUP BY` 및 `MAX`(또는 대안)를 사용하여 최신 정보를 검색하는 방법은 무엇입니까?

SQL의 `GROUP BY` 및 `MAX`(또는 대안)를 사용하여 최신 정보를 검색하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-26 02:38:11371검색

How to Retrieve the Latest Information Using SQL's `GROUP BY` and `MAX` (or Alternatives)?

SQL Group By & Max를 사용하여 최신 정보 검색

일부 시나리오에서는 그룹화된 가장 최근 또는 최대 값을 검색해야 합니다. 데이터 세트의 특정 열을 기준으로 합니다. 이러한 일반적인 집계 중 하나는 고유한 값 조합에 대한 최신 정보를 찾는 것입니다.

알람 목록이 포함된 다음 표를 고려하세요.

id name alarmId alarmUnit alarmLevel
1 test voltage psu warning
2 test voltage psu ceasing
3 test voltage psu warning
4 test temp rcc warning
5 test temp rcc ceasing

목표는 가장 최근 항목만 검색하는 것입니다. AlarmId와 AlarmUnit의 각 조합에 대한 정보입니다. 예상 결과는 다음과 같습니다.

id name alarmId alarmUnit alarmLevel
3 test voltage psu warning
5 test temp rcc ceasing

이 결과를 얻기 위해 여러 가지 접근 방식을 활용할 수 있습니다. 일반적인 방법 중 하나는 각 그룹 내의 각 행에 순위를 할당하는 ROW_NUMBER() 함수를 사용하는 것입니다. 다음 쿼리는 이 함수를 활용합니다.

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn
    FROM mytable
) q
WHERE rn = 1

이 쿼리는 AlarmId 및 AlarmUnit의 각 조합에 대해 가장 최근 행을 반환합니다.

ROW_NUMBER() 함수를 지원하지 않는 데이터베이스의 경우 , MySQL과 같은 다른 접근 방식을 사용할 수 있습니다.

SELECT mi.*
FROM (
    SELECT alarmId, alarmUnit, MAX(id) AS mid
    FROM mytable
    GROUP BY alarmId, alarmUnit
) mo
JOIN mytable mi
ON mi.id = mo.mid

이 쿼리는 하위 쿼리를 사용하여 최대값을 식별합니다. AlarmId 및 AlarmUnit의 각 조합에 대해 id를 지정한 다음 결과를 원래 테이블과 조인하여 해당 행을 검색합니다.

PostgreSQL 버전 8.3 이하에서는 DISTINCT ON 절을 활용할 수 있습니다.

SELECT DISTINCT ON (alarmId, alarmUnit) *
FROM mytable
ORDER BY alarmId, alarmUnit, id DESC

이 쿼리는 최신 정보를 효과적으로 제공하는 AlarmId 및 AlarmUnit의 각 조합에 대해 첫 번째 고유 행을 반환합니다. 이러한 기술을 활용함으로써 개발자는 데이터에서 가장 최근 값을 효율적으로 검색할 수 있으므로 사용 가능한 최신 정보를 기반으로 현명한 결정을 내릴 수 있습니다.

위 내용은 SQL의 `GROUP BY` 및 `MAX`(또는 대안)를 사용하여 최신 정보를 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.