집 >데이터 베이스 >MySQL 튜토리얼 >SQL의 `GROUP BY` 및 `MAX`(또는 대안)를 사용하여 최신 정보를 검색하는 방법은 무엇입니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!