programing

가장 최근 날짜로 행을 선택하는 SQL

nasanasas 2020. 8. 28. 07:33
반응형

가장 최근 날짜로 행을 선택하는 SQL


다음 쿼리와 결과를 사용하여 ChargeId 및 ChargeType이 고유 한 최신 항목을 찾고 있습니다.

select chargeId, chargeType, serviceMonth from invoice

    CHARGEID    CHARGETYPE  SERVICEMONTH
1   101     R       8/1/2008
2   161     N       2/1/2008
3   101     R       2/1/2008
4   101     R       3/1/2008
5   101     R       4/1/2008
6   101     R       5/1/2008
7   101     R       6/1/2008
8   101     R       7/1/2008

원하는 :

    CHARGEID    CHARGETYPE  SERVICEMONTH
1   101     R       8/1/2008
2   161     N       2/1/2008

GROUP BY사용하여 유형 및 ID별로 항목을 그룹화 할 수 있습니다 . 그런 다음 MAX () Aggregate 함수를 사용하여 가장 최근 서비스 월을 가져올 수 있습니다. 아래는 ChargeId, ChargeType 및 MostRecentServiceMonth가 포함 된 결과 집합을 반환합니다.

SELECT
  CHARGEID,
  CHARGETYPE,
  MAX(SERVICEMONTH) AS "MostRecentServiceMonth"
FROM INVOICE
GROUP BY CHARGEID, CHARGETYPE

따라서 이것은 요청자가 요청한 것이 아니라 "가장 최근 날짜로 행을 선택하는 SQL"에 대한 대답입니다.

http://wiki.lessthandot.com/index.php/Returning_The_Maximum_Value_For_A_Row 에서 수정 됨

SELECT t.chargeId, t.chargeType, t.serviceMonth FROM( 
    SELECT chargeId,MAX(serviceMonth) AS serviceMonth
    FROM invoice
    GROUP BY chargeId) x 
    JOIN invoice t ON x.chargeId =t.chargeId
    AND x.serviceMonth = t.serviceMonth

SELECT chargeId, chargeType, MAX(serviceMonth) AS serviceMonth 
FROM invoice
GROUP BY chargeId, chargeType

대부분의 개발자는 거대한 데이터에 미치는 영향을 보지 않고 인라인 쿼리를 사용합니다.

간단하게 다음과 같이이 작업을 수행 할 수 있습니다.

select a.chargeId, a.chargeType, a.serviceMonth 
from invoice a
left outer join invoice b
on a.chargeId=b.chargeId and a.serviceMonth <b.serviceMonth 
where b.chargeId is null
order by a.serviceMonth desc

select to.chargeid,t0.po,i.chargetype from invoice i
inner join
(select chargeid,max(servicemonth)po from invoice 
group by chargeid)t0
on i.chargeid=t0.chargeid

위의 쿼리는 고유 한 청구 ID에 다른 청구 유형 조합이있는 경우 작동합니다.이 간단한 쿼리가 성능 시간을 고려할 때 도움이되기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/189213/sql-selecting-rows-by-most-recent-date

반응형