在使用 row_number()

问题描述

我正在尝试在 Microsoft sql Server 中获取下表。基本上我想要做的是获取每个销售 ID 的销售日期(日期和时间)和下一个销售日期(日期和时间),以及第一个销售日期的销售金额。下表解释了后面的内容

enter image description here

我已经完成了以下编码,但还没有达到上面的表格:

DECLARE @date1 AS datetime;
DECLARE @date2 AS datetime;

SET @date1 = DATEADD(HOUR,-72,GETDATE());
SET @date2 = DATEADD(HOUR,-1,GETDATE());

SELECT SaleID AS SaleID,[Sale Date & Time] AS SalesDate,RN
INTO #sales
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY SaleID ORDER BY [Sale Date & Time] ASC) AS RN,SaleID,SalesDate
      FROM Sales
      WHERE [Sale Date & Time] BETWEEN @date1 AND @date2) T;

来自查询第一部分的数据:

enter image description here

解决方法

我设法完成了上述部分,以防将来有人发现它有用。

使用了以下代码

with cte as

( 

select rownum = ROW_NUMBER() over (partition by SalesID order by [Sales Date & Time] asc),SalesID,[Sale Date & Time],[Amount]
from Sales
where [Sales Date & Time] between GETDATE()-7 and GETDATE()
)

select 

    a.SalesID,a.[Sale Date & Time],b.Sale Date & Time],a.[Amount]

from cte a

inner join cte b on b.rownum = a.rownum+1 and a.SalesID=b.SalesID