【发布时间】:2020-10-31 13:00:54
【问题描述】:
我正在使用 Microsoft SQL Server 2012,我想创建下表(从 2018-12-02 到 2019-08-31):
Clinic_code Clinic_name Day_start Day_end Weeks_passed
-----------------------------------------------------------------------------
A123 NAME1 2018-12-02 2018-12-08 1
A124 NAME2 2018-12-02 2018-12-08 1
A125 NAME3 2018-12-02 2018-12-08 1
[...]
A123 NAME1 2018-12-09 2018-12-15 2
A124 NAME2 2018-12-09 2018-12-15 2
A125 NAME3 2018-12-09 2018-12-15 2
[...]
A123 NAME1 2018-12-16 2018-12-22 3
A124 NAME2 2018-12-16 2018-12-22 3
A125 NAME3 2018-12-16 2018-12-22 3
我正在使用以下代码:
DECLARE @fromstartdate date = '2018-12-02'
DECLARE @fromenddate date = '2018-12-08'
SELECT
#MyTable.*, B.Day_start, C.Day_end,
DATEDIFF(day, MIN(B.Day_start) OVER (),
B.Day_start) + 1 AS Weeks_passed
FROM
#MyTable
CROSS APPLY
(SELECT TOP (DATEDIFF(DAY, @fromstartdate, DATEADD(Month, 9, @fromstartdate)))
Day_start = CONVERT(date, DATEADD(DAY, -1 + 7 * ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), @fromstartdate))
FROM master..spt_values n1) B
CROSS APPLY
(SELECT TOP (DATEDIFF(DAY, @fromenddate, DATEADD(Month, 9, @fromenddate)))
Day_end = CONVERT(date, DATEADD(DAY, -1 + 7 * ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), @fromenddate))
FROM master..spt_values n1) C
但是我没有收到第一个 @fromstartdate 和 @fromenddate 并且它已经超过了 2019 年 8 月 31 日。你能告诉我我做错了什么吗?
【问题讨论】:
-
2019 年 8 月之后的时间是由于“+7*” 不清楚预期的结果应该是什么。
-
感谢@JohnCappelletti。我对代码感到困惑。我想从周日到周六(从 2018-12-02 到 2019-08-31)有几个星期,例如,第 1 周(2018-12-02 2018-12-08),第 2 周(2018-12-09 2018-12-15)等针对不同的诊所(A123、A124 等)重复。类似于另一个问题,我认为我的想法是为不同的电影重复相同的日子。
标签: sql sql-server time-series