sql - 如何通过在接下来的 23 天内将日期列增加 1 天来将值插入下表?
问题描述
我正在使用 SQL Server 2014。我有一个表名T1
(摘录如下所示):
Company ReviewDate Rank Type Reviews
...
A 2020-10-12 8 Hotel 675
B 2020-10-12 10 Hotel 450
C 2020-10-12 21 Hotel 89
D 2020-10-12 60 Hotel 1200
A 2020-10-13 5 Hotel 688
B 2020-10-13 10 Hotel 500
C 2020-10-13 21 Hotel 89
D 2020-10-13 60 Hotel 1200
我需要使用以下逻辑T1
将 period 的表更新为2020-10-13
:2020-11-04
要附加到表的所有行都将具有与ReviewDate
on相同2020-10-12
的值,除了ReviewDate
它将增加 1 天直到2020-11-04
达到。
因此,这里是决赛桌外观的摘录(仅显示了附加的 ReviewDate 2020-10-13:
Company ReviewDate Rank Type Reviews
...
A 2020-10-11 8 Hotel 675
B 2020-10-11 10 Hotel 450
C 2020-10-11 21 Hotel 89
D 2020-10-11 60 Hotel 1200
A 2020-10-12 5 Hotel 688
B 2020-10-12 10 Hotel 500
C 2020-10-12 21 Hotel 89
D 2020-10-12 60 Hotel 1200
A 2020-10-13 5 Hotel 688
B 2020-10-13 10 Hotel 500
C 2020-10-13 21 Hotel 89
D 2020-10-13 60 Hotel 1200
...
注意:该表还包含之前 带有 ReviewDate 的条目,2020-10-12
但我只需要将特定时期的值插入到表中,其中的数据与2020-10-12
我怎样才能通过T-SQL
查询来做到这一点?
解决方案
您需要插入行。一种方法是交叉加入您想要的日期并使用它:
insert into t1 (Company, ReviewDate, Rank, Type, Reviews)
select t1.Company, v.date, t1.Rank, t1.Type, t1.Reviews
from t1 cross join
(values ('2020-10-13'), ('2020-10-14'), . . .
) v(date
where t1.reviewdate = '2020-10-12';
还有其他方法可以创建日期。一种方法是递归 CTE:
with dates as (
select convert(date, '2020-10-13') as dte
union all
select dateadd(day, 1, dte)
from dates
where dte < '2020-11-04'
)
select . . .
from t1 cross join
dates d;
推荐阅读
- amazon-web-services - 通过 S3 SignedUrl 保护 Strapi 上传文件夹
- javascript - 多页表单 html javascript
- github - 在 github 操作中更新私有子模块时的身份验证问题
- javascript - 如何在自定义钩子 react.js 中使用 React.useMemo?
- python - “NameError: name 'redirect' is not defined”即使重定向已导入
- javascript - 导航到对象属性值简写定义
- microsoft-dynamics - 从任务/作业计划程序运行报告
- micronaut - 接收一些对象并将它们转换为另一个对象的自定义 TypeConverter
- node.js - ReferenceError: bot 未在 discord bot 中定义
- java - Firebase SDK - 是否会以与触发 setValue 相同的顺序触发 onchildchanged?