跟踪策略的年份



我有一个保险单数据库,其中包含2列当前和以前的保单号。

Current policy number | Previous policy number
ABCD-0001             | 
ABCD-0002             | ABCD-0001
ABCD-0003             | ABCD-0002
XYZ-001               |

现在我想跟踪政策的年份。(注意:策略编号只是一个例子。实际上它是随机的(

例如:第一行:上一个策略编号为空=>目前的政策是第一年第2行:自上一政策起的第2年为第1行(即第1年(。

我开始使用Python和Mysql,所以我不知道如何跟踪策略的年份。

使用Python,我循环遍历每一行,并将结果插入到列表中。例如:第一行是第一年=>插入列表_跟踪

Current policy number | Previous policy number | Year
ABCD-0001             |                        | 1

然后在下一行中,如果有以前的策略,我使用list.index获得以前策略的年份并加1。

然而,当数据增加或更新时,这种方式似乎复杂而缓慢。在excel中,我可以通过if和vlookup的组合轻松做到这一点:如果前一年为空,则为1;如果不是,则为上一年的vlookup,并将vlookup的值加1。

请分享一些Python和Mysql或两者结合的新想法。

提前谢谢。

我想您想要一个递归查询:

with cte as (
select current_policy_number, previous_policy_number, 1 rn 
from mytable 
where previous_policy_number is null
union all
select t.current_policy_number, t.previous_policy_number, c.rn + 1
from cte c
inner join mytable t on t.previous_policy_number = c.current_policy_number
)
select * from cte

递归with子句从以前策略编号为null的行开始,并为它们分配行号1。然后,它遍历从根到叶的层次结构,并在执行过程中递增行号。

请注意,递归查询仅在MySQL 8.0中可用。

相关内容

  • 没有找到相关文章

最新更新