我剛剛回答的"查詢連續(xù)七天以上都有打卡的員工記錄"有解決方案,給你轉(zhuǎn)過來,希望能滿足你的要求
成都創(chuàng)新互聯(lián)公司專注于柳江網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供柳江營銷型網(wǎng)站建設(shè),柳江網(wǎng)站制作、柳江網(wǎng)頁設(shè)計、柳江網(wǎng)站官網(wǎng)定制、小程序設(shè)計服務(wù),打造柳江網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供柳江網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
可以利用一下ORACLE的ROWNUM機制來做點文章,因為它是自增的
我假設(shè)有這一張表 WORK
ID,上班日期(DA)
1,20080101
1,20080102
1,20080103
2,20080101
2,20080103
3,20080101
也可能是亂序的
第一步:排序
SELECT * FROM WORK ORDER BY ID, DA
第二步:日期-ROWNUM如果相同的話認為他們是連續(xù)的,然后GORUP BY一下
SELECT A.*, TO_NUMBER (A.DA - ROWNUM) DAYS
FROM (SELECT * FROM WORK ORDER BY ID, DA) A
第三步:分別求出連續(xù)區(qū)間,讓他們相減求出大于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
創(chuàng)建測試表:
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;
執(zhí)行:
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
結(jié)果:
方法和詳細的操作步驟如下:
1、第一步,查詢該庫中的所有表,測試sql,代碼見下圖,轉(zhuǎn)到下面的步驟。
2、第二步,執(zhí)行完上面的操作之后,查詢有多少個數(shù)據(jù)表,見下圖,轉(zhuǎn)到下面的步驟。
3、第三步,執(zhí)行完上面的操作之后,在TEST的開頭編寫一個查詢表的腳本,每個表中的記錄數(shù),代碼見下圖,轉(zhuǎn)到下面的步驟。
4、第四步,執(zhí)行完上面的操作之后,執(zhí)行sql,在輸出窗口中,可以看到每個表的輸出,見下圖。這樣,就解決了這個問題了。
問一下:是要找連續(xù)三天最大的,還是最大的數(shù)據(jù)是連續(xù)三天的?如果是最大的數(shù)據(jù)連續(xù)三天的
思路這樣,查詢所有reptype最大的那三條WORKDATE信息,并且YESTERDAYWORKINGTIME2,然后將這三條數(shù)據(jù)中max(WORKDATE)-MIN(WORKDATE)=2的reptype的數(shù)據(jù)打印出來。
需要嵌套查詢。
如果是連續(xù)三天的數(shù)據(jù)中最大的那三條思路要變一下。
大概這樣,示例,+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;
) ;
試試看。