sql >> Database teknologi >  >> RDS >> PostgreSQL

Få samlet tidsinterval fra flere rækker, hvis sekvensen ikke er brudt

Der kan være en måde at gøre dette på i én SQL-valg, men det undslipper mig. Jeg formåede dog at gøre det med en gemt funktion. Her er, hvad jeg gjorde til min test:

create table work
(id integer, start_date date, end_date date);

insert into work values (1, '2011-01-01','2011-02-02');
insert into work values (1, '2011-02-02','2011-04-04');
insert into work values (1, '2011-06-06','2011-09-09');
insert into work values (2, '2011-01-01','2011-02-02');
insert into work values (2, '2011-02-02','2011-03-03');

create or replace function get_data() returns setof work as
$body$
declare
    res work%rowtype;
    sd  date := null;
begin
    for res in
        select
            w1.id,
            case when exists (select 1 from work w2 where w1.id=w2.id and w2.end_date=w1.start_date) then null else w1.start_date end,
            case when exists (select 1 from work w2 where w1.id=w2.id and w2.start_date=w1.end_date) then null else w1.end_date end
        from
            work w1
        order by
            id, start_date, end_date
    loop
        if res.start_date is not null and res.end_date is not null then
            return next res;
        elsif res.start_date is not null then
            sd := res.start_date;
        elsif res.end_date is not null then
            res.start_date := sd;
            return next res;
        end if;
    end loop;

    return;
end;$body$
  language 'plpgsql';
 

select * from get_data() order by id, start_date;
 

returnerede dette resultat:

id | start_date | end_date ----+------------+------------ 1 | 2011-01-01 | 2011-04-04 1 | 2011-06-06 | 2011-09-09 2 | 2011-01-01 | 2011-03-03 (3 rows)

hvilket er, tror jeg, hvad du leder efter.



  1. hvordan man gemmer indisk sprog som telugu, hindi i mysql-databasen

  2. C# Mysql executenonqueryasync er ikke asynkron

  3. Hvorfor kan et indeks gøre en forespørgsel virkelig langsom?

  4. søgeside, der giver brugeren mulighed for at vælge mellem tre typer ved hjælp af php mysql