PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

अनुक्रम टूटा नहीं तो एकाधिक पंक्तियों से कुल समय अंतराल प्राप्त करें

एक एसक्यूएल चयन में ऐसा करने का एक तरीका हो सकता है, लेकिन यह मुझसे बच निकलता है। हालांकि मैं इसे एक संग्रहीत फ़ंक्शन के साथ करने में कामयाब रहा। यहाँ मैंने अपने परीक्षण के लिए क्या किया:

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;

यह परिणाम लौटाया:

 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)

मुझे लगता है कि आप क्या चाहते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं PostgreSQL में कॉलम डिफ़ॉल्ट मान कैसे बदलूं?

  2. क्या हम नॉर्डिक पीजीडे के लिए तैयार हैं?

  3. PDO का उपयोग करके पोस्टग्रेज में ऑटोरोलबैक

  4. PostgreSQL पिछले रिकॉर्ड के तत्व की जाँच कर रहा है

  5. डॉकर पर चल रहे पोस्टग्रेएसक्यूएल डेटाबेस के खिलाफ समानांतर गो परीक्षण निष्पादित किया गया