在我的Oracle数据库中,有一个带有用户登录日期和时间的会话表。通过此查询,我可以获得在给定时间段内登录(打开其会话)的用户数量-例如在一月份登录:
SELECT
COUNT(DISTINCT ses_username)
FROM
sessions
WHERE
to_char(ses_start_date, 'YYYY-MM-DD HH24:MI:SS') BETWEEN '2019-01-01 00:00:00' AND '2019-01-31 23:59:59'
[如何在PL / SQL中进行循环,以给我计数,但按月还是按天,按小时还是按小时,甚至按小时计算,甚至一天的四分之一小时(15分钟)。
编辑:
会话表格式为
ses_id ses_start_date ses_username
============================================
786895 2019-01-01 15:39:10 USER_1
786896 2019-01-01 15:39:11 USER_1
786897 2019-01-01 16:38:39 USER_1
786898 2019-01-01 16:38:40 USER_1
786899 2019-01-02 06:44:20 USER_2
786900 2019-01-02 06:44:21 USER_2
786901 2019-01-02 06:50:10 USER_3
786902 2019-01-02 06:50:11 USER_3
786903 2019-01-02 06:50:28 USER_4
786904 2019-01-02 06:50:30 USER_4
...
而且我需要知道每月每月,每小时或每小时或每15分钟内登录了多少个唯一的用户名。
我不确定,您问的是什么意思。但是可以,如果您想每天查看数据,则可以使用GROUP BY
和COUNT
,如下所示:
SELECT
TRUNC(ses_start_date) AS SESSION_DAY,
COUNT(DISTINCT ses_username)
FROM
sessions
WHERE
TRUNC(ses_start_date) BETWEEN DATE '2019-01-01' AND DATE '2019-01-31'
GROUP BY TRUNC(ses_start_date)
注意:请勿将日期转换为char并进行比较。如示例中所示,可以直接比较日期。
干杯!