2016-09-23 31 views
1

我在尋找如何根據用戶和日期編寫計數查詢。例如,如果我有以下數據:如何在oracle中執行基於一天的計數查詢sql

Agent  | Date_1 
Joe Bloggs | 06-jun-16 10:35:00 
Joe Bloggs | 06-jun-16 10:36:00 
Joe Bloggs | 06-jun-16 10:46:00 
Joe Bloggs | 07-jun-16 09:36:00 

我已經能寫:

我當前的查詢如下:

SELECT 
    AGENT 
    ,DATE_1 
    ,ROW_NUMBER() OVER (PARTITION BY AGENT ORDER BY DATE_1) AS COUNT_1  
FROM 
    TABLE_1 
    ; 

這給出了一個順序計數每行根據我的數據。但是我想在06年6月6日只顯示一次,因爲用戶和日期一樣,但我不確定我怎麼能得到這個結果。我想的是:

Agent Name | Date_1  | Count_1 
Joe Bloggs | 06-jun-16 | 1 
Joe Bloggs | 07-jun-16 | 1 

以下是我的create table和insert語句我的表:

CREATE TABLE TABLE_1 
    (  
"AGENT" VARCHAR2(12 BYTE), 
"DATE_1" DATE 
    ); 

插入語句

Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 09:47:23','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 09:47:23','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 09:47:23','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 09:47:23','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 09:47:23','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 09:47:23','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 09:47:23','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 09:47:23','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:07:47','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:07:47','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:07:47','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:07:47','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:07:47','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:07:47','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:07:47','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:07:47','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:16:48','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:16:48','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:16:48','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:16:48','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:16:48','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:16:48','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:16:48','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:16:48','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:32:31','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:32:31','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:32:31','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:32:31','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:32:31','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:32:31','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:32:31','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:32:31','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:33:35','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:33:35','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:33:35','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:33:35','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:33:35','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:33:35','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:33:35','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:33:35','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:49:20','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:49:20','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:49:20','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:49:20','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:49:20','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:49:20','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:49:20','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 10:49:20','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 11:14:17','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 11:14:17','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 11:14:17','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 11:14:17','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 11:14:17','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 11:14:17','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 11:14:17','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 11:14:17','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 14:08:13','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 14:08:13','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 14:08:13','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 14:08:13','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 14:08:13','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 14:08:13','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 14:08:13','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 14:08:13','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 15:31:05','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 15:31:05','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 15:31:05','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 15:31:05','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 15:31:05','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 15:31:05','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 15:31:05','DD-MON-RR HH24:MI:SS')); 
Insert into TABLE_1 (AGENT,DATE_1) values ('Joe Bloggs',to_date('07-JUN-16 15:31:05','DD-MON-RR HH24:MI:SS')); 

從我期待上述數據將大於30分鐘的所有觸摸計爲單一計數,任何落在30分鐘之間的內容都不會增加計數。

從我的數據第一次觸摸是09:47:23所以開始爲1,第二次獨特的觸摸是10:07:47(基於下一個日期時間),大約20分鐘後,所以計數保持在1 ,現在看在第三個不同的時間,這是在10:16:48這是從前一個9分鐘後,所以計數仍然會保持爲1.

所以實際上它是一個滾動30分鐘計數基於以前的時間戳,如果其低於30分鐘的計數保持與以前相同,如果其更大的計數增加1 ...

希望這會更有意義。

+0

我們展示了整個查詢。也是預期的結果。 – jarlh

+0

你可能需要這個..'GROUP BY Agent,TRUNC(DATE_1)' –

+0

你爲什麼不指望07-jun的那一行?你需要過濾你的數據嗎? – Aleksej

回答

-1

這會給你你指定的結果,每個代理和日期組合的計數爲30分鐘的窗口。

select agent 
     , trunc(date_1) as date_1 
     , sum(intvl)+1 as count_1 
from (
    SELECT 
     AGENT 
     , DATE_1 
     , case when date_1 >= lag(date_1) over (partition by agent order by date_1) 
      + to_dsinterval('0 0:30:0') 
      then 1 else 0 end as intvl 
    FROM 
     TABLE_1 
    ) 
group by agent 
     , trunc(date_1) 
order by 1, 2 
/

的LAG()解析函數允許我們DATE_1的當前值與前一個,其增加有三十分鐘間隔()來測試所要求的窗口進行比較。截斷從DATE_1列中刪除時間元素,每天給出一個結果。

+0

我看了一下,我必須嘗試和鍛鍊,如果他們是同一個經紀人的另一個觸摸,並且在半小時內,那麼計數保持爲1,否則如果下一次觸摸是在31分鐘到1小時之後,然後觸摸移動到2等。因此需要爲每次滾動30分鐘計數。這可能嗎? – user3191160

+0

@ user3191160:您需要的結果對我而言仍不清楚;你可以編輯你的問題嗎?添加一個更廣泛的例子和你需要的邏輯的一些解釋?重新編輯 – Aleksej

+0

包含插入語句並創建表。 – user3191160

-1

其simple.just寫一個外部SELECT語句象下面這樣:

select a.* 
    from 
    (SELECT 
     AGENT 
     ,DATE_1 
     ,ROW_NUMBER() OVER (PARTITION BY AGENT ORDER BY DATE_1) AS COUNT_1  
    FROM 
     PROJECT) a 
    where a.COUNT_1 = 1 ; 
+0

這與OP發佈的示例不符;然而,OP所需的實際結果對我來說仍然是未知的 – Aleksej

+0

我只能理解他已經擁有查詢和計數值爲1,2,3等結果集,他只需要第一個。所以我發佈了我的答案。讓我們看看我的理解是正確還是錯誤。 – XING