我有兩個表:最新客戶捐贈,金額
Customer
其中具有代表客戶ID的Id
列。CustomerDonation
包含CustomerId
(FK),Amount
和DatePayed
我想擁有所有的客戶連同其最新的捐款和捐款金額。
我在我的查詢中收到重複值,因此我不會將其粘貼到此處。
我有兩個表:最新客戶捐贈,金額
Customer
其中具有代表客戶ID的Id
列。CustomerDonation
包含CustomerId
(FK),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
添加其他字段,您可以確定性地選擇您想要的字段。
或者,如果你希望所有的人都使用DENSE_RANK()
代替ROW_NUMBER()
使用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
的SQL Server的哪個版本?你應該***在這裏粘貼你的查詢。它可能只需要稍微改變,我們可以更好地解釋這個問題。或者它甚至可能指示一些沒有提到的有用信息。如果你有「幾乎工作」的代碼,你應該總是*包含它。 – MatBailie