在MSSQL中查找上一条记录

问题描述 投票:0回答:1

示例代码

DECLARE @tHistory TABLE (PK INT IDENTITY, CustomerID INT, PaidAmount DECIMAL(18, 2), PaidDate DATE)

INSERT INTO @tHistory(CustomerID, PaidAmount, PaidDate) VALUES(123, 100.00, '4/1/2024')
INSERT INTO @tHistory(CustomerID, PaidAmount, PaidDate) VALUES(321, 500.00, '4/1/2024')
INSERT INTO @tHistory(CustomerID, PaidAmount, PaidDate) VALUES(123, 99.00, '5/1/2024')
INSERT INTO @tHistory(CustomerID, PaidAmount, PaidDate) VALUES(123, 103.00, '6/1/2024')
INSERT INTO @tHistory(CustomerID, PaidAmount, PaidDate) VALUES(321, 95.00, '6/1/2024')
INSERT INTO @tHistory(CustomerID, PaidAmount, PaidDate) VALUES(555, 95.00, '6/1/2024')
INSERT INTO @tHistory(CustomerID, PaidAmount, PaidDate) VALUES(123, 99.00, '8/1/2024')
INSERT INTO @tHistory(CustomerID, PaidAmount, PaidDate) VALUES(321, 503.00, '10/1/2024')


DECLARE @tReport TABLE (CustomerID INT, CurrentPK INT, PreviousPK INT)
INSERT INTO @tReport (CustomerID, CurrentPK) SELECT CustomerID, PK FROM @tHistory WHERE PaidDate = '6/1/2024'

因此,如果我有此查询,我想找到该客户的上一个条目

结果应该是这个例子中的

  • CustomerID 123 当前 PK 是 4 之前应该是 3
  • CustomerID 321 当前 PK 是 5 之前应该是 2
  • CustomerID 555 当前 PK 为 6 之前应为空

我想事情会是这样的 ORDER BY row_number() OVER (PARTITION BY CustomerID ORDER BY PK DESC) 但我就是找不到合适的组合。

谢谢你

sql sql-server
1个回答
0
投票

选择*来自 ( SELECT *, LAG(pk) OVER (PARTITION BY CustomerID ORDER BYpaiddate) as PreviousPK2 FROM @tHistory ) t WHERE 付费日期 = '6/1/2024'

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.