2013-03-19 3 views
0

여기에는 많은 관련 주제가 있지만 실제로 문제는 해결되지 않았습니다.그룹별로 가장 높은 결과를 얻은 다음 날짜순으로 그룹화하십시오.

SalesTable :

PersonID | SaleAmount | SaleDate | TransactionID 
6117 | 10 | 2013-03-13 | 1 
6117 | 10 | 2013-03-11 | 2 
6400 | 100 | 2013-03-12 | 3 
6400 | 10 | 2013-02-05 | 4 
6525 | 0 | 2013-03-14 | 5 
6400 | 0 | 2013-04-01 | 6 

내가 각 사람으로부터 가장 높은 판매 금액의 거래를 할 수 있습니다. 동일한 사람의 모든 거래가 동일한 판매 금액 인 경우 최신 날짜로 반환하십시오.

예상 결과 :

PersonID | SaleAmount | SaleDate | TransactionID 
6117 | 10 | 2013-03-13 | 1 
6400 | 100 | 2013-03-12 | 3 
6525 | 0 | 2013-03-14 | 5 

나는 가장 높은 판매로 사람이 문제 그룹에 수 없었다 그러나 모든 판매 금액은 한 사람에서 동일하면 최신 트랜잭션을 얻을 couldnt한다. 그것은 나에게 잘못된 날짜를 줄 것이기 때문에

select personid, max(saleamount) from SalesTable group by personid 

select personid, max(saleamount), max(saledate) 
from SalesTable 
group by personid 

잘못입니다 6400

6117 | 10 | 2013-03-13 | 1 
6400 | 100 | 2013-04-01 | 3 
6525 | 0 | 2013-03-14 | 5 
+1

이있는 RDBMS를 지정하십시오 적절한 태그 (Oracle, SQL Se rver, MySQL 등). 보편적으로 지원되지 않는 언어 나 제품 기능을 이용하는 대답이있을 수 있습니다. 또한 특정 RDBMS로 태그를 지정하면 답변에 더 적합한 사람들로부터 질문을받을 수 있습니다. – Taryn

답변

1

시도 :

with cte as 
(select s.*, 
     rank() over (partition by PersonID 
        order by SaleAmount desc, SaleDate desc) rn 
from SalesTable s) 
select PersonID, SaleAmount, SaleDate, TransactionID 
from cte 
where rn=1 
+0

SalesTable에서 "s"를 놓친 것 같습니다. – user2188129

+0

@ user2188129 : 죄송합니다. 감사합니다. 그에 따라 업데이트되었습니다. –

관련 문제