对最近的日期进行排序,但如果日期已在前一行中使用,则不进行排序

dsekswqp  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(338)

标题中的问题很难概括,所以在文本中检查img的视觉解释。
我不能把两张table连在一起。第一个表的日期( startdatetable )应该在另一个表中获得下一个/最近的日期( enddatetable ). 由于大多数行都有一个 startdate 可以找到下一个 enddate ,在另一个之前 enddate 有新的吗 startdate .
但是,如果有两个 startdate 只有一个 enddate 提供给 startdate s将加入相同的 enddate .
我想做的是,如果一个日期已经在前一行中使用过,它就不应该在下一行中使用。
我想要的行高亮显示。

我开始使用的sql

select *
from (
    select rank() over (partition by tid order by enddate asc) as rnk
        , id, startdate, enddate
    from startdateTable
    inner join enddateTable on startdateTable.ID = enddateTable.id
        and enddateTable.enddate > startdateTable.startdate
) q
where q.rnk = 1

我得到了以下结果。最后一行应该是2100年的日期,因为前一行使用的是2020-06年的日期。

a14dhokn

a14dhokn1#

如果您有两个表,并且希望将它们对齐,那么可以使用 row_number() :

select s.id, s.startdate, e.enddate
from (select s.*, row_number() over (partition by id order by startdate) as seqnum
      from startdateTable
     ) s join
     (select e.*, row_number() over (partition by id order by enddate) as seqnum
      from enddateTable
     ) e
     on e.id = s.id and e.seqnum = s.seqnum

相关问题