如何根据结果集的先前行更新列数据

时间:2017-11-08 07:21:59

标签: sql-server

我是MS SQL服务器的新手,我想编写一个查询来将数据从LHS转换为RHS。 (如下图所示)

enter image description here

我已经提到了herehere给出的答案,但由于在同一个ID上对结果集进行分组,因此无法完全弄清楚查询。

非常感谢任何帮助 感谢。

1 个答案:

答案 0 :(得分:3)

您不需要group by clause

from clause上,您可以使用2 auto join使用索引查找下一行和上一行。

select clause上你需要调整case when语句来实现你的特定规则,例如(未经过测试,但想法就在这里)

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

今天的日期:

  • Mysql:CURDATE()
  • SQLServer:getdate()

注意:您还可以使用leadlag窗口功能。