У меня есть таблица журналов соединений для клиентов в нашей базе данных, и я ежедневно рассчитываю количество соединений, которые каждый клиент совершил за предыдущие семь дней. Таблица источника я использую имеет схемуПодсчитайте количество сеансов за последние X дней
uuid, sessionuid, connection_timestamp
То, что я хочу, как выход
uuid, _date, total_connections_over_trailing_seven_days,
так, что я могу видеть, для данного учетной записи клиента и определенной даты, как много раз, что человек связал в последние семь (или что-то еще) предыдущие дни.
Запрос я написал для достижения этой цели является
SELECT
uuid,
connection_timestamp::date as _date,
COUNT(sessionuid) OVER (ORDER BY timestamp_session ROWS 6 PRECEDING) as trailing_seven_day_session_count
FROM connection_history_table
Но когда я выполнить этот запрос, я получаю отдельную строку для каждого пользователя, и каждый connection_timestamp в исходной таблице вместо одной записи для каждого уникального connection_timestamp :: даты. Кроме того, значение в trailing_seven_day_session_count увеличивается с 1 до максимального значения 7 (если в данный день есть как минимум 7 сеансов), но после этого не увеличивается. Поэтому кажется, что я подсчитываю количество сеансов в определенный день, но только за первые 7 сеансов.
uuid _date trailing_seven_day_session_count
16398 2015-02-18 00:00:00 1
16398 2015-02-18 00:00:00 2
16398 2015-02-18 00:00:00 3
16398 2015-02-18 00:00:00 4
16398 2015-02-18 00:00:00 5
16398 2015-02-18 00:00:00 6
16398 2015-02-18 00:00:00 7
16398 2015-02-18 00:00:00 8
16398 2015-02-18 00:00:00 8
16398 2015-02-25 00:00:00 1
16398 2015-02-25 00:00:00 2
16398 2015-02-25 00:00:00 3
16398 2015-02-25 00:00:00 4
16398 2015-02-25 00:00:00 5
16398 2015-02-25 00:00:00 6
16398 2015-02-25 00:00:00 7
16398 2015-02-25 00:00:00 8
16398 2015-02-25 00:00:00 8
Я новичок в использовании оконных функций, мне непонятно, что я делаю здесь неправильно. Я попытался сделать раздел с помощью connection_timestamp :: date, но это тоже не помогло. Я в основном хватаюсь за соломинку и делаю это безуспешно.
Спасибо, Брэда
Да, я пробовал что-то подобное, но он не получает того, чего я хочу, потому что он рассчитывает на предыдущие шесть строк, и я не обязательно должен иметь строку для повседневности. У меня есть только ежедневная игра, которую пользователь играл. Поэтому я должен придумать совершенно другое решение. Спасибо за вашу помощь. Я собираюсь поднять ваше решение и принять его, потому что он решает исходную проблему, которую я опубликовал, просто не проблема, которую я действительно имею. : –
Должно ли это быть однократным выстрелом или можно запустить запрос итеративно ... сказать один раз в день? Если вы можете сделать это ежедневно, вы можете добавить предложение where во внутренний select, который выбирает только записи, где connection_timestamp> = sysdate-7, чтобы получить то, что вы хотите. – systemjack
Добавлен janky-запрос для обработки нулевых дней. – systemjack