扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
我刚刚回答的"查询连续七天以上都有打卡的员工记录"有解决方案,给你转过来,希望能满足你的要求
成都创新互联公司专注于柳江网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供柳江营销型网站建设,柳江网站制作、柳江网页设计、柳江网站官网定制、小程序设计服务,打造柳江网络公司原创品牌,更为您提供柳江网站排名全网营销落地服务。
可以利用一下ORACLE的ROWNUM机制来做点文章,因为它是自增的
我假设有这一张表 WORK
ID,上班日期(DA)
1,20080101
1,20080102
1,20080103
2,20080101
2,20080103
3,20080101
也可能是乱序的
第一步:排序
SELECT * FROM WORK ORDER BY ID, DA
第二步:日期-ROWNUM如果相同的话认为他们是连续的,然后GORUP BY一下
SELECT A.*, TO_NUMBER (A.DA - ROWNUM) DAYS
FROM (SELECT * FROM WORK ORDER BY ID, DA) A
第三步:分别求出连续区间,让他们相减求出大于6的值
SELECT C.ID
(SELECT B.ID, (MAX (B.DA) - MIN (B.DA)) DAYS
FROM (SELECT A.*, TO_NUMBER (A.DA - ROWNUM) DAYS
FROM (SELECT * FROM WORK ORDER BY ID, DA) A) B
GROUP BY B.ID, B.DAYS) C
WHERE C.DAYS 7
创建测试表:
create table test
(name varchar2(1),
num int);
insert into test values ('A',1);
insert into test values ('A',2);
insert into test values ('A',4);
insert into test values ('B',5);
insert into test values ('B',7);
insert into test values ('B',8);
insert into test values ('C',9);
insert into test values ('C',11);
commit;
执行:
with t as
(select name,
num,
row_number() over(partition by name order by num desc) rn
from test)
select s.name, s.num
from (select t2.*
from t t1, t t2
where t1.rn = t2.rn - 1
and t1.num = t2.num + 1
and t1.rn = 1
union all
select * from t where rn = 1) s
order by name, num
结果:
方法和详细的操作步骤如下:
1、第一步,查询该库中的所有表,测试sql,代码见下图,转到下面的步骤。
2、第二步,执行完上面的操作之后,查询有多少个数据表,见下图,转到下面的步骤。
3、第三步,执行完上面的操作之后,在TEST的开头编写一个查询表的脚本,每个表中的记录数,代码见下图,转到下面的步骤。
4、第四步,执行完上面的操作之后,执行sql,在输出窗口中,可以看到每个表的输出,见下图。这样,就解决了这个问题了。
问一下:是要找连续三天最大的,还是最大的数据是连续三天的?如果是最大的数据连续三天的
思路这样,查询所有reptype最大的那三条WORKDATE信息,并且YESTERDAYWORKINGTIME2,然后将这三条数据中max(WORKDATE)-MIN(WORKDATE)=2的reptype的数据打印出来。
需要嵌套查询。
如果是连续三天的数据中最大的那三条思路要变一下。
大概这样,示例,+1月,+2月 的地方自己改。
select personid
from logint a,logint b, login c
where a.personid = b.personid
and a.personid = c.personid
and a.logintime + 1月 = b.logintime
and a.logintime + 2月 = c.logintime
select * from cjgl_cjqxx where cjd in
(
select cjd from
(
select cjd from cjgl_cjqxx where cbrq = to_date('2014-05-06','yyyy-mm-dd') group by cjd
union
select cjd from cjgl_cjqxx where cbrq = to_date('2014-05-07','yyyy-mm-dd') group by cjd
union
select cjd from cjgl_cjqxx where cbrq = to_date('2014-05-08','yyyy-mm-dd') group by cjd
)
group by cjd having count(cjd) = 3;
) ;
试试看。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流