У меня есть база данных, user_requests
, которая в основном выглядит так:
user_id | request_timestamp | request_type | other_metadata
-----------|-------------------------|--------------|----------------
user1 | 2018-11-01:04:04:41 | type1 | opaquedata_A
user2 | 2018-11-01:04:03:41 | type2 | opaquedata_B
user1 | 2018-11-01:04:01:41 | type1 | opaquedata_C
user3 | 2018-11-01:04:05:41 | type3 | opaquedata_D
user4 | 2018-11-01:04:01:41 | type4 | opaquedata_E
И она огромна .Выполнение какой-либо операции над всем этим абсолютно бесполезно, все должно быть похоже на то, «какие запросы были наиболее распространены в этом месяце », никто никогда не проверяет это в целом.
Я пытаюсь проанализировать первые запросы нескольких пользователей.Мне абсолютно не нужны первые запросы каждого пользователя или за все время, если это репрезентативная выборка.
Однако я сталкиваюсь с проблемой, когда все мои обычные попытки ограничить это - найти «первый запрос в границах», а не «первый запрос , если он находится в пределах »
SELECT DISTINCT user_id,
first_value(request_type) over (PARTITION BY user_id ORDER BY request_timestamp
rows BETWEEN unbounded preceding and unbounded following) requestType,
first_value(other_metadata) over (PARTITION BY user_id ORDER BY request_timestamp
rows BETWEEN unbounded preceding and unbounded following) otherMetadata,
first_value(request_timestamp) over (PARTITION BY user_id ORDER BY request_timestamp
rows BETWEEN unbounded preceding and unbounded following) utteranceTimestamp
FROM user_requests
WHERE request_timestamp BETWEEN '2018-11-01' AND request_timestamp < '2018-12-01'
Таким образом, он находит самый ранний запрос от пользователя в ноябре, когда я хочу получить самый ранний запрос от пользователя в целом , если этот запрос в ноябре.
Есть идеи, как мне получить то, что я хочу, и при этом писать запросы, выполнение которых не занимает несколько часов?