Как сделать al oop с приращением периода времени в PL / SQL - PullRequest
1 голос
/ 18 февраля 2020

В моей базе данных 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'

Как сделать oop в PL / SQL которые дают мне счет, но по дням в месяц или по часам в месяц или по часам в день или даже четверть часа (15 минут) в день.

РЕДАКТИРОВАТЬ:

Формат таблицы сеанса is

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 минут в день.

1 Ответ

3 голосов
/ 18 февраля 2020

Я не уверен, что вы имеете в виду, повторяя свой вопрос. Но да, если вы хотите просматривать данные по дням, вы можете использовать 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)

Примечание: Не преобразовывать дату в символ и сравни. Даты можно сравнивать напрямую, как показано в примере.

Cheers !!

...