【发布时间】:2018-04-20 10:34:59
【问题描述】:
在 SQL Server 中 - 如何从给定日期 + 周期(以天为单位)确定下一个日期(即今天或将来)。
例如:
2018 年 4 月 2 日 + 7 天周期的 NextDate 为 4 月 23 日(在 4 月 20 日撰写此问题时)。
我正在寻找一个数学/模型解决方案,而不是日历表,因为有问题的数据非常庞大(数百万行)。
示例/到目前为止我尝试过的内容:
CREATE TABLE #temptable
(
[OrderDate] DATE,
[Cycle] SMALLINT
);
INSERT INTO #temptable
VALUES
( N'2018-03-26T00:00:00', 7 ),
( N'2018-03-26T00:00:00', 14 ),
( N'2018-03-26T00:00:00', 28 ),
( N'2018-03-26T00:00:00', 56 ),
( N'2018-04-02T00:00:00', 7 ),
( N'2018-04-02T00:00:00', 2 ),
( N'2018-04-09T00:00:00', 7 ),
( N'2018-04-16T00:00:00', 7 );
SELECT OrderDate,
Cycle,
DATEDIFF(DAY, OrderDate, GETDATE()) / Cycle AS Cycles,
DATEDIFF(DAY, OrderDate, GETDATE()) % Cycle AS CyclesRemainder,
NULL AS NextDate
FROM #temptable
ORDER BY OrderDate;
DROP TABLE #temptable;
【问题讨论】:
-
一张涵盖未来 20 年的日历表本身不足 8000 行。您从哪里获得数百万行?
-
我将“百万行”的含义作为输入数据,而不是日历数据。
-
@Andrew - 但即便如此,为什么由数百万行组成的 input 排除了日历表的使用?这就是我不明白的。如果有的话,它会使用日历表将推向,因为它更有可能实现基于集合的良好结果。
-
@Damien_The_Unbeliever - 不是,但那是 OP 的职权范围。我也不确定日历表在这里是否有很大帮助,因为它是一个数学问题。
标签: sql sql-server sql-server-2008 tsql sql-server-2012