CREATE TABLE #TmpTbl
(
PurchaseId INT
,UserID INT
,InvoiceName VARCHAR(20)
,PaymentDue DATE
,PaymentMade DATE
)
INSERT INTO #TmpTbl
SELECT 1
,1
,'Ef Fee'
,'2016-01-01'
,'2016-01-02'
UNION ALL
SELECT 2
,1
,'Monthly Pmt'
,'2016-05-01'
,'2016-05-02'
UNION ALL
SELECT 3
,1
,'Ef Fee'
,'2016-07-26'
,NULL
PurchaseId UserID InvoiceName PaymentDue PaymentMade
1 1 EF Fee 2016-01-01 2016-01-02
2 1 Monthly Pmt 2016-05-01 2016-05-02
3 1 EF Fee 2016-07-26 NULL
ごめんなタイトルは申し訳ありません。
私が必要としているのは、Ef Fee
という名前の請求書に対して、各ユーザーのMAX(PaymentDue)
を取得することです。次に、選択された行に基づいてPaymentMade
の値(通常は他の列)を取得する必要があります。行のためにPurchaseId
を得ることができればいいですが、必須ではありません。これまで私がこれまでやってきたやり方は、複数のCTEにあります。 UserId, InvoiceName, MAX(PaymentDue)
をつかんで、3つすべてのデータを取得して、必要な他のデータを取得しますが、複数のcteを使用せずにこれを達成するためのより良い/より速い方法があるのだろうかと思います。最大値に基づいて行から他のデータを取得
最新のPaymentDue
であるため、結果が3行になります。
EDIT:
PurchaseId UserID InvoiceName PaymentDue PaymentMade
3 1 EF Fee 2016-07-26 NULL
ありがとう!これは私が必要とするように働いているように見えます! – Doolius