2013-03-19 61 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 

我能够通过组人以最高的销售没有问题,但不可能获得最新交易如果所有的销售金额从一个人是一样的。

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 2013-03-19 20:13:59

回答

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 – user2188129 2013-03-19 20:25:08

+0

@ user2188129后面的“s”:糟糕!谢谢 - 回答相应更新。 – 2013-03-19 20:26:25