Sql 选择上一行日期作为当前行日期
我有一张像下面这样的桌子 我需要它如下 按卡号分组,当投保id不同时,出生日期应为前一行结束日期 提前感谢您可以使用Sql 选择上一行日期作为当前行日期,sql,Sql,我有一张像下面这样的桌子 我需要它如下 按卡号分组,当投保id不同时,出生日期应为前一行结束日期 提前感谢您可以使用lag()。目前尚不清楚哪些列可用于记录排序,但其想法是: select card_no, insured_no, lag(end_date, 1, birth_date) over(partition by card_no order by insured_no) birth_date, end_date from mytable 理想情况下,您可以使用一列
lag()
。目前尚不清楚哪些列可用于记录排序,但其想法是:
select card_no, insured_no,
lag(end_date, 1, birth_date) over(partition by card_no order by insured_no) birth_date,
end_date
from mytable
理想情况下,您可以使用一列(或一组列)来替换
order by
子句中的insurated\u no
,该列可以唯一地标识每行的位置。这是一个棘手的问题,因为存在重复项。我将从lag()
开始:
但是,结果不稳定,如果每行上都有一个唯一的id,结果会更好。答案如下
select card_no,
insured_no,
lag(end_date, 1, birth_date) over (partition by card_no order by end_date, birth_date) as birth_date,
end_date
from table_name
必须在延迟中通过(结束日期,1,出生日期),否则,第一行的出生日期将不正确,因为第一行需要相同的出生日期。请解释逻辑并提供数据库标签。按卡号分组。当投保id与前一行不同时,出生日期应该是前一行结束日期谢谢,我已经更新了输出表pic。请检查并指导我实现它谢谢,我已经更新了输出表pic。请检查并指导我实现它谢谢,我已经更新了输出表pic。请检查并指导我实现它
select card_no,
insured_no,
lag(end_date, 1, birth_date) over (partition by card_no order by end_date, birth_date) as birth_date,
end_date
from table_name