首页 > 解决方案 > 动态计算日期列 MS SQL Server 中所有行的 DateDiff

问题描述

我正在尝试计算单个列中连续行的日期之间的天数差Date_col。然后,我想将这些差异放入一个名为 Expected_Results 的新列中。

到目前为止,我有以下代码:

DECLARE @datedifferences DATETIME

SET @datedifferences = (SELECT DATEDIFF(DAY, MIN(Date_col), MAX(Date_col)) FROM Schema.Table)

SELECT DISTINCT TOP 100 Date_col
FROM Database.Schema.Table
WHERE Date_col = @datedifferences
ORDER BY Date_col

以下是我想要返回的内容:

Date_col    Expected_Results
1/1/2018    --
2/2/2018    31
3/3/2018    31
4/4/2018    31
5/5/2018    31
6/6/2018    31
7/7/2018    31
8/8/2018    31

但是,查询成功运行,但没有返回任何内容。我怀疑这是因为我缺少某种循环来遍历行。如何将 while 循环合并到查询中以成功迭代行,以便查询打印预期结果?

标签: sql-servertsql

解决方案


你认为这只是一个声明吗?因为不是。您有 3 个单独的语句:

DECLARE @datedifferences datetime;

SET @datedifferences = DATEDIFF(day, min(Date_col), max(Date_col));

SELECT DISTINCT TOP 100 Date_col
FROM Database.Schema.Table
WHERE Date_col = @datedifferences
ORDER BY Date_col;

中间语句 ( SET...) 无法访问它下面的 SELECT 语句的 FROM 子句,因此它不知道Date_col您在其中引用的内容。因此,中间语句中的列名无效Date_col


推荐阅读