簡體   English   中英

如何在SQL中的不同行中將多個時間段連接在一起?

[英]How do I join together multiple time periods over separate rows in SQL?

我有一個包含唯一ID的SQL表和兩個表示時間段(天)開始和結束的列。 對於每個unique_id,如果它們可以組合形成一個連續的句點,我想將行連接在一起。 例如,我有:

unique_id   start           end
A           2013-01-01      2013-01-02
A           2013-01-03      2013-01-05
A           2013-01-05      2013-01-07
A           2013-01-07      2013-01-09
A           2013-01-09      2013-01-11
B           2013-01-02      2013-01-03
B           2013-01-05      2013-01-06

我想要:

unique_id   start           end
A           2013-01-01      2013-01-02
A           2013-01-03      2013-01-11
B           2013-01-02      2013-01-03
B           2013-01-05      2013-01-06

我們可以假設沒有重疊的時期。

我怎樣才能做到這一點?

with TableX as(
 select * from (values ('A','2013-01-01'::date,'2013-01-02'::date),
('A','2013-01-03'::date,'2013-01-05'::date),
('A','2013-01-05'::date,'2013-01-07'::date),
('A','2013-01-07'::date,'2013-01-09'::date),
('A','2013-01-09'::date,'2013-01-11'::date),
('B','2013-01-02'::date,'2013-01-03'::date),
('B','2013-01-05'::date,'2013-01-06'::date),
('C','2013-01-03'::date,'2013-01-05'::date),
('C','2013-01-05'::date,'2013-01-07'::date),
('C','2013-01-07'::date,'2013-01-09'::date),
('C','2013-01-10'::date,'2013-01-12'::date),
('C','2013-01-12'::date,'2013-01-15'::date)
               ) X(unique_id, start, endd)
)


select distinct unique_id,
       min(start) over(partition by unique_id,grp) as start,
       max(endd)   over(partition by unique_id,grp) as endd
  from
  (
   select *, sum(new) over(partition by unique_id order by start) grp
     from
     (
      select A.*,
             case when start=lag(endd) over(partition by unique_id order by start)
                  then 0 else 1 end as new
        from TableX A
     ) B
  ) C
 order by unique_id, start

結果:

unique_id|start     |endd
A        |2013-01-01|2013-01-02
A        |2013-01-03|2013-01-11
B        |2013-01-02|2013-01-03
B        |2013-01-05|2013-01-06
C        |2013-01-03|2013-01-09
C        |2013-01-10|2013-01-15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM