我有一个保险单数据库,其中包含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中可用。