将相同的序列号分配给一组行

时间:2016-03-30 18:41:13

标签: sql oracle

我有一个包含一对多行的表,我想跟踪它的变化。 我正在尝试编写一个查询来获取具有相同ID号的一组行的相同序列号,如果对应的ID号发生任何更改,那么我想重复这组行以便我跟踪这些变化带有新的,我可以跟踪这个事实。

这是一个以数据开头的例子:

-barHeight

结果我正在寻找:

person_id_number  person_type  start_date end_date
0001              kid          2003       2009
0001              student      2010       2014
0002              teacher      2010       9999

现在,同一个person_id有一个新行:

Person_id_number person_type  p_key
0001             kid          1          
0001             student      1
0002             teacher      3

输出现在应该是:

person_id_number  person_type  start_date end_date
0001              kid          2003       2009
0001              student      2010       2014
0001              teacher      2015       9999
0002              teacher      2010       9999

我如何在SQL查询中执行此操作?

1 个答案:

答案 0 :(得分:-1)

您可以使用date_added来聚合表中小于或等于当前行的多少个不同的date_added值。 select语句中的查询应该是您要查找的p_key字段。

select c.* , 
    (select COUNT(distinct date_added) 
     from table ci 
     where ci.person_id_number=c.person_id_number 
     and ci.date_added <= c.date_added) p_key
from table c