栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如果序列未中断,则从多行获取总时间间隔

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如果序列未中断,则从多行获取总时间间隔

可能有一种方法可以在一个SQL选择中执行此操作,但是它使我无所适从。我设法做到了一个存储功能。这是我所做的测试:

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)

我想,这就是您所追求的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/634763.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号