代码之家  ›  专栏  ›  技术社区  ›  Fandango68

如何根据相似的数据对第二条记录进行分区?

  •  0
  • Fandango68  · 技术社区  · 6 年前

    我有一张这样的桌子…

    enter image description here

    我所追求的是在SQL中实现这一点的方法…

    enter image description here

    我不需要红线,因为我已经在“结束日期”列中有效地改变了日期 向上的 到1点。IE:我希望该行被丢弃或忽略

    日期基于第二行的开始日期和结束日期,或者基于fromcode和tocode的下一行 相对的 . 为了更好的解释,我要做的是每两行对fromcode=下一行的tocode进行分组,为了保持一致性,我要确保第一行的tocode=第二行的fromcode,依此类推。

    我希望我说清楚了。

    我试过使用递归连接,使用子连接的fromcode=tocode和子连接的tocode=fromcode链接下一行,另外还要确保记录具有相同的航行id,并且秩大于第一行的秩。但我只会胡言乱语。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Yogesh Sharma    6 年前

    你可以使用 outer apply :

    select t.*, tt.end_date as new_end_date
    from table t outer apply (
          select top 1 t1.end_date
          from table t1
          where t1.voyage_id = t.voyage_id and
                t1.rank > t.rank
          order by t1.rank
    ) tt
    where tt.end_date is not null;
    
        2
  •  1
  •   Gordon Linoff    6 年前

    你可以用 left join --假设 rank S没有间隙:

    select t.*,
           tnext.end_date as new_end_date
    from t join
         t tnext
         on tnext.voyage_id = t.voyage_id and tnext.rank = t.rank + 1;
    

    请注意 join 删除最后一行并查找下一个结束日期。