【问题标题】:How to display for last 5 days audit record in the DB2 through an SQL statement day wise and show count of them day wise in a single row如何通过 SQL 语句按天显示 DB2 中最近 5 天的审计记录,并在单行中按天显示它们的计数
【发布时间】:2017-07-01 06:19:01
【问题描述】:

对于管理员,我执行某种类型的 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) 

请帮忙。

【问题讨论】:

  • 我对您的代码进行了格式化,使其可读,很明显您缺少)——它在哪里?在分组之前?
  • 谢谢..near group by 我错过了括号..

标签: sql db2 audit


【解决方案1】:

您需要使用 decode 对数据进行透视。看看这个例子,它采用了这个

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

by using decode in db2

SELECT Year,
       MAX(DECODE(Quarter, 1, Results)) AS Q1,
       MAX(DECODE(Quarter, 2, Results)) AS Q2,            
       MAX(DECODE(Quarter, 3, Results)) AS Q3,
       MAX(DECODE(Quarter, 4, Results)) AS Q4
  FROM Sales
  GROUP BY Year;

【讨论】:

  • 我希望默认为零。如果用户执行了任何操作,这只会获取记录。
【解决方案2】:

您需要一个日期表...在这里我使用递归即时制作——这不是最好的方法...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-03
    • 2010-09-24
    • 2020-08-19
    • 1970-01-01
    • 2013-03-19
    • 2021-11-28
    • 2013-06-16
    • 1970-01-01
    相关资源
    最近更新 更多