我在Oracle数据库中有这个视图,我正在尝试生成一个带有SQL查询的报告,但它现在最近几天没有工作,所以决定获得专家建议。
View确实运行良好。基本上,视图的作用是记录所有登录任何数据库以进行审计的用户。
查看列:
问题:
我正在尝试按日期= 2012年12月26日登录dbname = x的所有用户名和程序生成SQL进行分组
统计用户在2012年12月26日登录的用户名和程序
基本上试图得到......如果dbname = x通过username = abc获得50000登录,那么abc是从哪个服务器和什么程序连接的?
尝试以下查询
select dbname, username, server, program, logon_time from audit
where username = abc and
dbname in (select dbname from audit
where dbname='x' and logon_time = to_date('26-DEC-2012','DD-MON-YYY'))
group by username, program
答案 0 :(得分:0)
您可以尝试这样的事情:
SELECT dbname, username, server, program, trunc(logon_time), count(*) FROM audit
WHERE username = 'abc'
AND dbname = 'x'
AND logon_time >= to_date('26-DEC-2012','DD-MON-YYY')
AND logon_time < to_date('27-DEC-2012','DD-MON-YYY')
GROUP BY dbname, username, server, program, trunc(logon_time)
编辑:修正了修复分组错误的答案康拉德指出 仍然不是100%确定需要什么,但这应该更接近。
答案 1 :(得分:0)
这似乎非常简单,除了reformatting the date+time information只涉及日期信息的问题。
查询1:
SELECT username, program
FROM Audit
WHERE dbname = 'x'
AND TO_CHAR(logon_time, 'YYYY-MM-DD') = '2012-12-26'
GROUP BY username, program;
这应该会为您提供2012年12月26日登录到数据库'x'
的不同用户名和程序组合的列表。
查询2:
除了关于数据库名称的标准外,您需要查询1中行的COUNT,因此:
SELECT COUNT(*)
FROM (SELECT username, program
FROM Audit
WHERE TO_CHAR(logon_time, 'YYYY-MM-DD') = '2012-12-26'
GROUP BY username, program
)
这应该为您提供2012年12月26日连接到任何数据库的不同用户名,程序组合的计数。