2015-01-08 63 views
0

我試圖從每個組或分區的最新日期獲取10分鐘間隔數據。最大日期間隔分析函數範圍窗口

僞碼SQL:

Select 
count(1) Over(partition by col1, col2, col3 
       Order by Col_Date Desc 
       Range Max(Col_Date) Between Max(Col_Date) - 10(24*60)) col_upd 
From 
Table_1; 

價值觀出的這個特定範圍將需要數分配爲刪除設置。

2014-01-05 01:20:00 -- Max date 
2014-01-05 01:15:13 
2014-01-05 01:12:13 
2014-01-05 01:07:13 -- 1) these last two rows should be set for 
2014-01-05 01:06:13 -- 2) delete or assign same id 

有沒有解析函數的方法來處理這個?

回答

0

您還沒有給出表結構,但如果我做了一個虛表所示:

create table t42 (id number, grp_id number, dt date); 

insert into t42 values (1, 1, timestamp '2014-01-05 01:20:00'); 
insert into t42 values (2, 1, timestamp '2014-01-05 01:15:13'); 
insert into t42 values (3, 1, timestamp '2014-01-05 01:12:13'); 
insert into t42 values (4, 1, timestamp '2014-01-05 01:07:13'); 
insert into t42 values (5, 1, timestamp '2014-01-05 01:06:13'); 

那麼這會給你組中每一行相比,其(分析)最大的年齡:

select grp_id, id, dt, max(dt) over (partition by grp_id) - dt as age 
from t42 
order by id; 

    GRP_ID   ID DT       AGE 
---------- ---------- ------------------- ------------ 
     1   1 2014-01-05 01:20:00   0 
     1   2 2014-01-05 01:15:13 .00332175926 
     1   3 2014-01-05 01:12:13 .00540509259 
     1   4 2014-01-05 01:07:13 .00887731481 
     1   5 2014-01-05 01:06:13 .00957175926 

你可以使用它作爲一個內部查詢並過濾掉的記錄長達10分鐘的時候:

select grp_id, id, dt 
from (
    select grp_id, id, dt, max(dt) over (partition by grp_id) - dt as age 
    from t42 
) 
where age > (10*60)/(24*60*60) 
order by id; 

    GRP_ID   ID DT     
---------- ---------- ------------------- 
     1   4 2014-01-05 01:07:13 
     1   5 2014-01-05 01:06:13 

然後你可以根據需要使用那些刪除/更新。從您的問題中不清楚您的組/分區是否已經從內部查詢計算出來;如果是這樣,你可以使用,而不是我的t42表。 (當然,更改列名等)。

相關問題