sql-server - 如何根据 T-SQL (SSMS 2017) 中下一条记录的 [EffectiveDate]-1 计算到期日期?
问题描述
我有以下简单查询和结果表:
SELECT
[Client_ID],
[ClientName],
[EffectiveDate],
[MedConditionID],
[MedCondition]
FROM
[Medications]
结果表:
我需要填充 [ExpirationDate] 字段 - 它基于下一条记录的 [EffectiveDate] 字段 - 1。
例如 - 如果生效日期是 '1/16/2019'、'10/16/2019',那么 '1/16/2019' 的 [ExpirationDate] = '10/15/2019' 等。
对于最大生效日期(在此表中为 '3/18/2020'),到期日期应始终为 = '2050/12/31'
请参阅下面的更新表(我需要如何填充 [ExpirationDate],我突出显示了第一个 2 个示例):
请帮忙提出任何建议
我在考虑一些 Lag() / Lead() 函数,它们将相互比较记录,但不确定
谢谢!
解决方案
declare @Medications table
(
[Client_ID] int,
[ClientName] varchar(50),
[EffectiveDate] date,
[MedConditionID] int,
[MedCondition] varchar(50)
);
insert into @Medications(Client_Id, ClientName, EffectiveDate, MedConditionId, MedCondition)
values
(100, 'jeffrey', '20190116', 123, 'Alcohol'),
(100, 'jeffrey', '20191016', 123, 'Alcohol'),
(100, 'jeffrey', '20191016', 267, 'Head'),
(100, 'jeffrey', '20191220', 123, 'Alcohol'),
(100, 'jeffrey', '20191220', 267, 'Head'),
(100, 'jeffrey', '20200121', 123, 'Alcohol'),
(100, 'jeffrey', '20200121', 267, 'Head');
select EffectiveDate,
dateadd(day, -1,
lead(EffectiveDate, 1, '20510101' ) over(partition by Client_id, MedConditionId order by EffectiveDate)
) as ExpirationDate,
*
from @Medications;
推荐阅读
- flutter - 如何在flutter中将textscalefactor设置为整个应用程序
- node.js - 不支持 ALGORITHM=COPY。原因:参与外键的列被重命名
- python - 我是 pycharm 新手,遇到了一些问题
- git - 如何测量文件的 git churn
- react-native - React Native @5Navigation 反应测试库
- asp.net-core - 无法从 Blazor WASM 调用匿名 api 端点
- html - 标题 div 保持在顶部,垂直滚动 div 在下方,仅附有滚动条的主体
- reactjs - ReactNative VirtualizedList 性能优化
- javascript - 在 d3/observablehq 中以 JSON 格式解析日期
- reactjs - 在 React Native 中渲染数据