표의 한 열만 기준으로 중복 값 제거
내 질문:
SELECT sites.siteName, sites.siteIP, history.date
FROM sites INNER JOIN
history ON sites.siteName = history.siteName
ORDER BY siteName,date
출력의 첫 번째 부분:
에서 중복 항목을 제거하려면 어떻게 해야 합니까?siteName
칼럼?다음을 기준으로 업데이트된 것만 남기고 싶습니다.date
기둥.
위의 출력 예에서 1, 3, 6, 10행이 필요합니다.
여기서 윈도우 기능이 작동합니다.row_number()
유용합니다.
SELECT s.siteName, s.siteIP, h.date
FROM sites s INNER JOIN
(select h.*, row_number() over (partition by siteName order by date desc) as seqnum
from history h
) h
ON s.siteName = h.siteName and seqnum = 1
ORDER BY s.siteName, h.date
당신의 예로 볼 때, 다음과 같이 가정하는 것이 타당해 보입니다.siteIP
열은 다음에 의해 결정됩니다.siteName
열(즉, 각 사이트에는 하나만 있음)siteIP
) 만약 이것이 정말 그렇다면, 다음을 이용한 간단한 해결책이 있습니다.group by
:
select
sites.siteName,
sites.siteIP,
max(history.date)
from sites
inner join history on
sites.siteName=history.siteName
group by
sites.siteName,
sites.siteIP
order by
sites.siteName;
그러나 내 가정이 올바르지 않은 경우(즉, 사이트에 여러 개가 있을 수 있음)siteIP
), 그렇다면 어떤 것이 당신에게 질문하는지 명확하지 않습니다.siteIP
두 번째 열에 쿼리를 반환합니다.만약에siteIP
그러면 다음 쿼리를 수행할 수 있습니다.
select
sites.siteName,
min(sites.siteIP),
max(history.date)
from sites
inner join history on
sites.siteName=history.siteName
group by
sites.siteName
order by
sites.siteName;
다음 패턴을 사용하여 이러한 쿼리를 해결합니다.
SELECT *
FROM t
WHERE t.field=(
SELECT MAX(t.field)
FROM t AS t0
WHERE t.group_column1=t0.group_column1
AND t.group_column2=t0.group_column2 ...)
즉, 필드 값이 최대값인 레코드를 선택합니다.이를 쿼리에 적용하기 위해 JOIN을 두 번 반복할 필요가 없도록 공통 테이블 식을 사용했습니다.
WITH site_history AS (
SELECT sites.siteName, sites.siteIP, history.date
FROM sites
JOIN history USING (siteName)
)
SELECT *
FROM site_history h
WHERE date=(
SELECT MAX(date)
FROM site_history h0
WHERE h.siteName=h0.siteName)
ORDER BY siteName
이 값은 최대 값을 계산하는 필드가 고유한 경우에만 작동합니다.예를 들어, 다음과(와)date
필드는 각각 고유해야 합니다.siteName
즉, IP를 밀리초당 여러 번 변경할 수 없는 경우입니다.제 경험에 따르면, 이것은 일반적으로 그렇습니다. 그렇지 않으면 어떤 레코드가 최신인지 알 수 없습니다.만약에history
테이블에 대한 고유 인덱스가 있습니다.(site, date)
이 쿼리는 또한 매우 빠릅니다, 인덱스 범위 스캔은history
테이블 스캔은 첫 번째 항목만 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/17507887/eliminating-duplicate-values-based-on-only-one-column-of-the-table
'source' 카테고리의 다른 글
Python: print 명령으로 줄 바꿈 방지 (0) | 2023.07.16 |
---|---|
Cloud Firestore를 사용하여 컬렉션의 문서 수를 가져오는 방법 (0) | 2023.07.16 |
정적 메소드 - 다른 메소드에서 메소드를 호출하는 방법은 무엇입니까? (0) | 2023.07.16 |
Python 웹 프레임워크, WSGI 및 CGI의 적합성 (0) | 2023.07.16 |
ORA-03113: ASP.Net 앱에서 장시간 비활성화 후 통신 채널의 파일 종료 (0) | 2023.07.16 |