다음 쿼리와 결과를 사용하여 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에 다른 청구 유형 조합이있는 경우 작동합니다.이 간단한 쿼리가 성능 시간을 고려할 때 도움이되기를 바랍니다.