例子資料
create table LEAD_TABLE
(
CASEID VARCHAR2(10),
STEPID VARCHAR2(10),
ACTIONDATE DATE
)
insert into LEAD_TABLE values('Case1','Step1',to_date('20161101','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step2',to_date('20161103','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step3',to_date('20161104','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step4',to_date('20161105','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step5',to_date('20161107','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step4',to_date('20161108','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step6',to_date('20161112','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case1','Step1',to_date('20161201','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case2','Step2',to_date('20161202','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case2','Step3',to_date('20161203','yyyy-mm-dd'));
insert into LEAD_TABLE values('Case2','Step3',to_date('20161205','yyyy-mm-dd'));
commit;
有個需求,我想算出以CASEID分組,ACTIONDATE 排序,并以各自分組第一條的ACTIONDATE 為時間基準,獲得以后所有該分組時間差>=兩天的資料
想要的結果如下,有沒辦法?
('Case1','Step1',to_date('20161101','yyyy-mm-dd'));基準,要
('Case1','Step2',to_date('20161103','yyyy-mm-dd')); 這條與上一條差2天,要
('Case1','Step3',to_date('20161104','yyyy-mm-dd'));這條與上一條差1天,不要
('Case1','Step4',to_date('20161105','yyyy-mm-dd'));這條與上一條差1天,,但與上上一條差2天,要
('Case1','Step5',to_date('20161107','yyyy-mm-dd')); 這條與上一條差2天,要
('Case1','Step4',to_date('20161108','yyyy-mm-dd'));這條與上一條差1天,不要
('Case1','Step6',to_date('20161112','yyyy-mm-dd'));這條與上上一條差5天,要
('Case1','Step1',to_date('20161201','yyyy-mm-dd'));這條與上上一條差18天,要
('Case2','Step2',to_date('20161202','yyyy-mm-dd'));基準,要
('Case2','Step3',to_date('20161203','yyyy-mm-dd'));這條與上一條差1天,不要
('Case2','Step3',to_date('20161205','yyyy-mm-dd'));這條與上一條差2天,,但與上上一條差3天,要
uj5u.com熱心網友回復:
這么復雜,用pl/sql或者外部語言處理吧,sql搞這個就算能搞也很麻煩的另外,to_date('20161202','yyyy-mm-dd')應該是to_date('20161202','yyyymmdd')吧
uj5u.com熱心網友回復:
樓主研究下 lead 和 lag 這兩個函式,可以實作你的需求;uj5u.com熱心網友回復:
select caseid,stepid,actiondate from
(select caseid,stepid,actiondate,lag(actiondate,1) over(partition by caseid order by actiondate) ldate from lead_table)
where actiondate - ldate >=2 or ldate is null
不過,('Case1','Step4',to_date('20161105','yyyy-mm-dd'));這條與上一條差1天,,但與上上一條差2天,要
這句不滿足,為啥還比較上上一條記錄呢
('Case1','Step4',to_date('20161108','yyyy-mm-dd'));這條與上一條差1天,不要 這條又為什么不比較上上一條記錄呢
uj5u.com熱心網友回復:
因為('Case1','Step4',to_date('20161105','yyyy-mm-dd'))的上一條不要,所以他的要比的是上上條
而('Case1','Step4',to_date('20161108','yyyy-mm-dd'));上一條是要的,所以他要比就是上一條而不是上上條
uj5u.com熱心網友回復:
看你的資料是否有規律性,比如統一分組內不會用相同的actiondate,如果成立,那就可以取actiondate - ldate >=2 和actiondate - ldate = 1 為偶數個時的資料
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/94871.html
標籤:高級技術
上一篇:吐槽,吐槽。
下一篇:關于ORA卡硬碟一說
