Sql server 如何基于结果集的前几行更新列数据
我是MS SQL server的新手,我想编写一个查询来将数据从LHS转换为RHS。(如下图所示) 我参考了给出的答案,但无法完全理解查询,因为结果集分组在同一id上 非常感谢您的帮助。Sql server 如何基于结果集的前几行更新列数据,sql-server,Sql Server,我是MS SQL server的新手,我想编写一个查询来将数据从LHS转换为RHS。(如下图所示) 我参考了给出的答案,但无法完全理解查询,因为结果集分组在同一id上 非常感谢您的帮助。 谢谢。您不需要分组依据子句 在from子句上,您可以使用2自动联接来使用索引查找下一行和上一行 在select子句中,您只需调整case when语句,以实现如下特定规则(未经测试,但想法如下): 今日日期: Mysql:CURDATE() SQLServer:getdate() 注意:您也可以使用lea
谢谢。您不需要
分组依据子句
在from子句
上,您可以使用2自动联接
来使用索引查找下一行和上一行
在select子句
中,您只需调整case when
语句,以实现如下特定规则(未经测试,但想法如下):
今日日期:
- Mysql:CURDATE()
- SQLServer:getdate()
注意:您也可以使用
lead
和lag
窗口功能。您不需要分组依据子句
在from子句
上,您可以使用2自动联接
来使用索引查找下一行和上一行
在select子句
中,您只需调整case when
语句,以实现如下特定规则(未经测试,但想法如下):
今日日期:
- Mysql:CURDATE()
- SQLServer:getdate()
注意:您也可以使用
lead
和lag
窗口函数。CURDATE将是MySQL函数,与此无关。谢谢@Indent,我一定会尝试一下。我的要求是更新同一表格中的数据。谢谢。我会继续创建并保留一个新的已处理表。谢谢@Indent和草莓。提示:您可以创建一个视图RHS而不是表RHS,因为您需要这两个objectCURDATE都是MySQL函数,这与此无关。谢谢@Indent,我一定会尝试一下。我的要求是更新同一表格中的数据。谢谢。我会继续创建并保留一个新的已处理表。谢谢@Indent和草莓。提示:您可以在需要这两个对象的情况下创建视图RHS而不是表RHS
create table RHS as
select
Curr.policy,
case
when prev.EventDate is null then Curr.policyIssueDate
else EventDate
end as StartDate,
case
when next.EventDate is null then CURDATE()
else EventDate
end as EndDate
from
LHS Curr
left join LHS next on
Curr.INDEX+1= next.INDEX and
Curr.policy = next.policy
left join LHS prev on
Curr.INDEX-1= prev.INDEX and
Curr.policy = prev.policy