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

売り上げが最も多い人でグループ化することは問題ありませんでしたが、1人の売り上げがすべて同じであると、最新の取引を取得できませんでした。

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 に答える