sql - 如何在 PL/SQL 中创建一个随时间段递增的循环

标签 sql database oracle plsql

在我的 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 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)

注意:不要将日期转换为字符并进行比较。可以直接比较日期,如示例所示。

干杯!!

关于sql - 如何在 PL/SQL 中创建一个随时间段递增的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60275885/

相关文章:

mysql - 将级联与复合主键结合使用

sql - 生成数据库指标的简单查询?

c# - 使用 ADO.NET 传递表值参数

database - 如何通过 Ant (版本控制)更新数据库?

java - 通过Java的GUI将数据添加到数据库表中。

sql - 查询以求和以前的值

iphone - OR 运算符在查询 sqlite iphone 中不起作用

sql - 将三行(包含空值)的数据合并为一行

Java 使用 spring 异步保存/更新数据到数据库中

oracle - oracle中的内连接和等连接有什么区别,以下哪个查询可以提供高性能?