0

我在这里找到了许多相关的主题,但没有真正解决我的问题。

销售表:

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

我可以按销售额最高的人分组,但如果一个人的所有销售额相同,我就无法获得最新的交易。

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
4

1 回答 1

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
于 2013-03-19T20:19:14.463 回答