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
对不起,这个蹩脚的标题。
我需要的是为每个用户获取MAX(PaymentDue)
,以获取名为Ef Fee
的发票。然后,我需要根据所选行选择PaymentMade
值(通常是其他一些列)。能够获得行的PurchaseId
会很好,但不是必需的。我过去的做法是使用多个CTE。抓住UserId, InvoiceName, MAX(PaymentDue)
,然后匹配所有3来获取所需的其他数据,但我想知道是否有更好/更快的方法来实现这一点,而不必使用多个cte。根据最大值从行中获取其他数据
期望的结果将是第3行,因为它是最近的PaymentDue
。
编辑:
PurchaseId UserID InvoiceName PaymentDue PaymentMade
3 1 EF Fee 2016-07-26 NULL
谢谢!这看起来像我需要的一样工作! – Doolius