私は2つのテーブルがあります。最新のお客様の寄付と量
Customer
顧客IDを表すId
列があります。CustomerId
(FK)が含まれていCustomerDonation
、Amount
とDatePayed
私は一緒に彼らの最新寄付し、その寄付額ですべての顧客を持っていたいと思います。
私は質問に重複した値を受け取りますので、ここには貼り付けません。
私は2つのテーブルがあります。最新のお客様の寄付と量
Customer
顧客IDを表すId
列があります。 CustomerId
(FK)が含まれていCustomerDonation
、Amount
とDatePayed
私は一緒に彼らの最新寄付し、その寄付額ですべての顧客を持っていたいと思います。
私は質問に重複した値を受け取りますので、ここには貼り付けません。
WITH
SortedDonation AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY DatePayed DESC) AS SeqID,
*
FROM
CustomerDonation
)
SELECT
*
FROM
Customer
LEFT JOIN
SortedDonation
ON SortedDonation.CustomerId = Customer.Id
AND SortedDonation.SeqId = 1
同じ顧客が同じDatePayed
で複数の寄付を作ることができる場合、これは任意に一つだけそれらのを選ぶだろう。
ORDER BY
にフィールドを追加すると、どのフィールドを確定するかを選択できます。
それとも、あなたがそれらのすべてがROW_NUMBER()
Use Row_Number()分析関数。
Select * from (
Select customerId,Amount,DatePayed, row_number() over (partition by CustomerId order by DatePayed desc) as rowN)
as tab where rowN = 1
あなたは正しい、速いタイピング=) –
にのみ、このためCustomerDonation
テーブルを必要としています。顧客のその他の情報が必要な場合は、Customer
テーブルに参加することができます。
WITH cte AS (
SELECT
CustomerId
, MAX(DatePayed) AS LastDate
FROM
CustomerDonation
)
SELECT
cd.CustomerId
, cd.Amount
, cd.DatePayed
FROM
CustomerDonation cd
JOIN cte ON cd.CustomerId = cte.CustomerId
AND cd.DatePayed = cte.LastDate
の代わりにDENSE_RANK()
を使用したい場合は、また、WITH TIESオプションSQL Serverのバージョン
Select Top 1 With Ties *
From YourTable
Order By Row_Number() over (Partition By CustomerId Order By DatePayed Desc)
を使用することができますか?あなたは***まだ***あなたのクエリをここに貼り付けるべきです。わずかな変更が必要な場合がありますが、問題をより詳しく説明できます。あるいは、特に言及されていない有用な情報を示すかもしれません。あなたが「ほとんど働いている」コードを持っているなら、あなたは必ず*それを含めるべきです。 – MatBailie