查询时怎么去除重复的时间(精确到月)
比如 一个人上班时间记录是
2010-01-01至2010-10-31
2010-08-01至2010-12-31
第2个时间是兼职,这样他就重复了8月-10月,累计查询时他的工作时间就多了几个月
怎么查询才能把重复的时间去除?
create table shijian(
uuid VARCHAR2(50),
rq_b VARCHAR2(30),
rq_e VARCHAR2(30)
)
;insert into shijian (UUID, RQ_B, RQ_E)
values ('001', '2010-01-01', '2010-10-31');insert into shijian (UUID, RQ_B, RQ_E)
values ('002', '2010-08-01', '2010-12-31');
比如 一个人上班时间记录是
2010-01-01至2010-10-31
2010-08-01至2010-12-31
第2个时间是兼职,这样他就重复了8月-10月,累计查询时他的工作时间就多了几个月
怎么查询才能把重复的时间去除?
create table shijian(
uuid VARCHAR2(50),
rq_b VARCHAR2(30),
rq_e VARCHAR2(30)
)
;insert into shijian (UUID, RQ_B, RQ_E)
values ('001', '2010-01-01', '2010-10-31');insert into shijian (UUID, RQ_B, RQ_E)
values ('002', '2010-08-01', '2010-12-31');
解决方案 »
- 跪求 如何恢复删除的表
- 大师帮忙 C#调用PROCEDURE 存储过程
- 关于 SYSDBA SYSOPA
- 我的表名忘了,就知道钱俩个字母是ju,能找回来不??
- 如何在myeclipese下配置as啊
- Oracle11g 安装失败!Enterprise Manager configuration failed due to the following error
- 9i的初始化参数文件在哪里?
- 用Select生成新表不行,郁闷ing
- 谁知道存储过程和触发器等信息存放在哪个系统表里面?!!!
- 我今天突然发现在Export数据库导出命令用不了?为什么?请大家帮忙指点.
- oracle数字类型自动补零的问题
- CRS-0184: Cannot communicate with the CRS daemon. RAC重启错误
是UUID ?
那第二条记录应该是
insert into shijian (UUID, RQ_B, RQ_E)
values ('001', '2010-08-01', '2010-12-31');啊
第一条记录的区间是:2010-01-01, 2010-02-01, 2010-03-01,..., 2010-10-01
第二条记录的区间是:2010-08-01, 2010-09-01, 2010-10-01,..., 2010-12-01
然后用union把两个区间的所有并且不重复的部分取出来,也就是:
从2010-01-01 一直到 2010-12-01,这部分的SQL是:
select add_months(to_date(substr(rq_b, 1, 7), 'yyyy-mm'),level-1) duration
from shijian,
(select min(rq_b) rq_min, max(rq_b) rq_max from shijian) minmax
where shijian.rq_b = minmax.rq_min
connect by level <= months_between(to_date(substr(rq_e, 1, 7), 'yyyy-mm'),
to_date(substr(rq_b, 1, 7), 'yyyy-mm'))+1
union
select add_months(to_date(substr(rq_b, 1, 7), 'yyyy-mm'),level-1) duration
from shijian,
(select min(rq_b) rq_min, max(rq_b) rq_max from shijian) minmax
where shijian.rq_b = minmax.rq_max
connect by level <= months_between(to_date(substr(rq_e, 1, 7), 'yyyy-mm'),
to_date(substr(rq_b, 1, 7), 'yyyy-mm'))+1;
结果是:
2010/01/01 00:00:00
2010/02/01 00:00:00
2010/03/01 00:00:00
2010/04/01 00:00:00
2010/05/01 00:00:00
2010/06/01 00:00:00
2010/07/01 00:00:00
2010/08/01 00:00:00
2010/09/01 00:00:00
2010/10/01 00:00:00
2010/11/01 00:00:00
2010/12/01 00:00:00
insert into shijian (UUID, RQ_B, RQ_E)
values ('001', '2010-01-01', '2010-10-31');insert into shijian (UUID, RQ_B, RQ_E)
values ('002', '2010-08-01', '2010-12-31');
表中如何确定,这2条记录是关于同一个人的呢?