在我的 Oracle 数据库中有一个包含用户登录日期和时间的 session 表。通过此查询,我可以获得给定时间段内登录(打开 session )的用户数量 - 例如在一月份登录:
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 分钟)的方式进行计数。
编辑:
session 表格式为
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)
注意:不要将日期转换为字符并进行比较。可以直接比较日期,如示例所示。
干杯!!
关于sql - 如何在 PL/SQL 中创建一个随时间段递增的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60275885/