Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过SQL语句逐日显示DB2中最近5天的审计记录,并在一行中逐日显示这些记录的计数_Sql_Db2_Audit - Fatal编程技术网

如何通过SQL语句逐日显示DB2中最近5天的审计记录,并在一行中逐日显示这些记录的计数

如何通过SQL语句逐日显示DB2中最近5天的审计记录,并在一行中逐日显示这些记录的计数,sql,db2,audit,Sql,Db2,Audit,对于管理员,我正在执行某种类型的sql操作。记录的类型如下 date number of failed login 13/02/2017 1 12/02/2017 2 11/02/2017 0 10/02/2017 9 09/02/2017 0 我希望0,9,0,2,1在一行中 我尝试了下面的查询。但默认情况下无法获取零。 用户执行零操作的用户日必须在那里 select

对于管理员,我正在执行某种类型的sql操作。记录的类型如下

date        number of failed login
13/02/2017            1
12/02/2017            2
11/02/2017            0
10/02/2017            9
09/02/2017            0
我希望0,9,0,2,1在一行中

我尝试了下面的查询。但默认情况下无法获取零。 用户执行零操作的用户日必须在那里

select LISTAGG(cnt, ', ') 
from (select count(*) as cnt 
      from OPERATIONINFO 
      where OPERATIONTYPE='FAILEDLOGIN' 
        and CUSTID = 123 
        and date(UPDATEDDATEOFLOGIN) > (current date - 5 day)  
      group by YEAR(date), MONTH(date), DAY(date) 

请提供帮助。

您需要使用解码来透视数据。看看这个例子

INSERT INTO Sales VALUES
(2004, 1, 20),
(2004, 2, 30),
(2004, 3, 15),
(2004, 4, 10),
(2005, 1, 18),
(2005, 2, 40),
(2005, 3, 12),
(2005, 4, 27);
对此

Year Q1 Q2 Q3 Q4
---- -- -- -- --
2004 20 30 15 10
2005 18 40 12 27


你需要一张日期表。。。在这里,我使用递归进行动态生成-这不是最好的方法

WITH DATES_TABLE AS 
(
   SELECT CURRENT DATE - 5 DAYS AS D FROM SYSIBM.SYSDUMMY1

   UNION ALL

   SELECT D + 1 DAY AS D FROM DATES_TABLE WHERE D < CURRENT DATE
), THE_DATA AS
(
  select D.D, SUM(CASE WHEN O.UPDATEDDATEOFLOGIN IS NOT NULL THEN 1 ELSE 0 END) as cnt 
  from DATES_TABLE D
  LEFT JOIN OPERATIONINFO O ON O.UPDATEDDATEOFLOGIN = D.D
  where O.OPERATIONTYPE='FAILEDLOGIN' 
    and O.CUSTID = 123 
  group by D.D

)
select  LISTAGG(cnt, ', ') 
from THE_DATA

默认情况下我想要零。这只会在用户执行任何操作的情况下获取记录。我对代码进行了格式化,以使其可读,并且很明显您缺少一个-它去哪里了?在分组之前?谢谢在分组之前我错过了括号。。
WITH DATES_TABLE AS 
(
   SELECT CURRENT DATE - 5 DAYS AS D FROM SYSIBM.SYSDUMMY1

   UNION ALL

   SELECT D + 1 DAY AS D FROM DATES_TABLE WHERE D < CURRENT DATE
), THE_DATA AS
(
  select D.D, SUM(CASE WHEN O.UPDATEDDATEOFLOGIN IS NOT NULL THEN 1 ELSE 0 END) as cnt 
  from DATES_TABLE D
  LEFT JOIN OPERATIONINFO O ON O.UPDATEDDATEOFLOGIN = D.D
  where O.OPERATIONTYPE='FAILEDLOGIN' 
    and O.CUSTID = 123 
  group by D.D

)
select  LISTAGG(cnt, ', ') 
from THE_DATA