如何在PL / SQL中以时间段为增量进行循环

问题描述 投票:1回答:1

在我的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分钟内登录了多少个唯一的用户名。

sql database oracle plsql
1个回答
2
投票

我不确定,您问的是什么意思。但是可以,如果您想每天查看数据,则可以使用GROUP BYCOUNT,如下所示:

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并进行比较。如示例中所示,可以直接比较日期。

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.