sql - 在 SQL Server 中创建日历表
问题描述
我正在使用 Microsoft SQL Server 2012,并且正在创建下表:
Clinic_code Clinic_name D D_days_passed
------------------------------------------------------
A123 NAME1 2018-12-01 1
A124 NAME2 2018-12-01 1
A125 NAME3 2018-12-01 1
[...]
A123 NAME1 2018-12-02 2
A124 NAME2 2018-12-02 2
A125 NAME3 2018-12-02 2
[...]
A123 NAME1 2018-12-03 3
A124 NAME2 2018-12-03 3
A125 NAME3 2018-12-03 3
我从@JohnCappelletti 改编了这里的代码,但我正在努力包含“D_days_passed”列,该列基本上计算自 Start_date 以来的天数:
DECLARE @fromdate date = '2018-12-01'
SELECT #MyTable.*, B.D
FROM #MyTable
CROSS APPLY
(SELECT TOP (DATEDIFF(DAY, @fromdate, DATEADD(Month, 9, @fromdate)) + 1)
D = CONVERT(date, DATEADD(DAY, -1 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)), @fromdate))
FROM master..spt_values n1) B
如果你有时间,
问题:如何将代码调整为,而不是包括每个诊所从一个日期到另一个日期的每一天,我想为每个诊所引入相同的一周时间段,例如从周六到周日:
Clinic_code Clinic_name D_start D_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
解决方案
您可以使用窗口函数来获取最早的日期,然后datediff()
:
Select t.*, B.D,
datediff(day, min(date) over (), date) + 1 as days_passed
From #MyTable t Cross Apply
(Select Top (DateDiff(DAY,@fromdate,DateAdd(Month,9,@fromdate))+1)
D=convert(date,DateAdd(DAY,-1+Row_Number() Over (Order By (Select Null)),@fromdate))
From master..spt_values n1
) B;
这也应该工作数周。
推荐阅读
- python - PySpark Dataframe - 迭代窗口分区
- java - Fragment Recycle View(带卡)重复和overalped
- python - 来自网站/原始网站的 Python 正则表达式 URL,没有 Https 和 Http
- typescript - React Native with Typescript and Jest 在 0.57 更新后被破坏:找不到相对于目录的预设“module:metro-react-native-babel-preset”
- elasticsearch - Elasticsearch 搜索被勒索软件锁定
- java - 如何使内部 Java 包在 Eclipse 中可访问?
- javascript - Owl Carousel 2 - 关于触发点击事件的更改问题
- laravel - 在段落标签中显示文本框值
- python - Python matplotlib colorbars:全部在最后一个轴上
- python - 使用 BeautifulSoup 从 html 文件中提取特定文本