繁体   English   中英

如何在Oracle SQL中基于天进行计数查询

[英]How to do a count query based on a day in 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 
    ;

这会根据我的数据对每一行进行顺序计数。 但是我只想显示16年6月6日的计数,因为用户和日期相同,但是我不确定如何获得该计数。 我想要的是:

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

以下是我的表的创建表和插入语句:

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,则与前一个时间戳相同。

希望这更有意义。

这将为您提供您指定的结果,对于座席和日期的每种组合,都有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的当前值与前一个值进行比较,然后将其增加30分钟的INTERVAL()以测试所需的窗口。 截断从DATE_1列中删除时间元素,每天给出一个结果。

它的simple.just只需编写一个外部选择语句,如下所示:

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    ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM