【发布时间】:2021-05-07 21:12:57
【问题描述】:
我正在尝试在 Microsoft SQL Server 中获取下表。基本上,我要做的是为每个销售 ID 获取销售日期(日期和时间)和下一个销售日期(日期和时间),以及第一个销售日期的销售金额。下表应稍后解释。
我已经完成了以下编码,但还没有到达上表:
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;
查询第一部分的数据:
【问题讨论】:
-
amt的值从何而来?样本数据将帮助我们帮助您。另外,我真的建议不要使用必须分隔标识的对象名称。[Sale Date & Time]确实不是一个好的列名选择。如果你想要一个包含多个单词的列,你最好使用 camelCase、PascalCase 或 Snake_case(就像你使用SalesDate一样)。 -
@Larnu - Amt 来自
Sales自己的表 -
但它没有在您的子查询中定义,别名为
T。我们看不到你的物体,所以你需要给出一个完整的例子。 -
另外,您的子查询 (
T) 没有定义列[Sale Date & Time],因此由于列引用无效,上述内容会出错。 -
不要把它放在 cmets 中,这没有任何意义。 Edit你的问题。
标签: sql-server join partitioning row-number