表A(非法信息) 字段如下:
AID        主键ID   
BID        B表外键ID
CREATEDATE 创建时间
表B(事件类型) 字段如下:
BID        主键ID
BNAME      名称
示例数据:
A数据:
AID      CREATEDATE                 BID  
--------------------------------------
1 2010-12-21 10:50:27 1
2 2010-12-21 10:54:27 2
3 2010-12-21 10:55:27 1
4 2010-12-21 16:21:05 1
5 2010-12-21 16:31:05 2
6 2010-12-21 16:31:05 1
7 2010-12-21 16:41:05 2
8 2010-12-21 16:41:05 1
9 2010-12-23 16:19:35 1
10 2010-12-23 16:29:35 3
11 2010-12-23 16:29:35 2
12 2010-12-23 16:49:35 1
13 2010-12-24 19:07:59 1
14 2010-12-24 19:07:59 2
--数据说明
同一时间段 可以存在3中不同的事件发生B数据:
BID       BNAME
-------------------------------------------
1         非法网络
2         滥用地址
3         存在漏洞需求:
统计某一时间段(可以是某一时间点)内出现的非法事件数效果:
--------------------------------------
时间               事件数   事件类型
--------------------------------------
2010/01/13 02:57   0       滥用网络地址
2010/01/13 02:57   1       非法使用网络
2010/01/13 02:57   0       终端安全漏洞2010/01/13 02:58   1       滥用网络地址
2010/01/13 02:58   2       非法使用网络
2010/01/13 02:58   0       终端安全漏洞2010/01/13 02:59   1       滥用网络地址
2010/01/13 02:59   0       非法使用网络
2010/01/13 02:59   0       终端安全漏洞2010/01/13 03:00   0       滥用网络地址
2010/01/13 03:00   0       非法使用网络
2010/01/13 03:00   0       终端安全漏洞2010/01/13 03:01   1       滥用网络地址
2010/01/13 03:01   1       非法使用网络
2010/01/13 03:01   0       终端安全漏洞2010/01/13 03:02   1       滥用网络地址
2010/01/13 03:02   1       非法使用网络
2010/01/13 03:02   0       终端安全漏洞2010/01/13 03:03   0       滥用网络地址
2010/01/13 03:03   0       非法使用网络
2010/01/13 03:03   0       终端安全漏洞--菜鸟遇到的几个问题
1.因为时间段有时候没有连续性,但是需求需要连续的数据统计(方面html报表显示,缺省时间数据为0),这个不知道怎么填充请大虾指教!

解决方案 »

  1.   

    --开始日期2010-12-21,结束日期2010-12-22
    SELECT c.createdate, c.bid, MAX(c.bname) bname, COUNT(aid) cnt
      FROM (SELECT a.aid, trunc(a.createdate, 'mi') createdate, a.bid FROM a) a,
           (SELECT *
              FROM b,
                   (SELECT to_date('2010-12-21', 'yyyy-mm-dd') +
                           (rownum - 1) / 1440 createdate
                      FROM dual
                    CONNECT BY rownum <=
                               (to_date('2010-12-22', 'yyyy-mm-dd') -
                               to_date('2010-12-21', 'yyyy-mm-dd') + 1) * 1440)) c
     WHERE c.createdate = a.createdate(+)
     GROUP BY c.createdate, c.bid
     ORDER BY c.createdate;