Если ваши даты действительно хранятся в виде строк 2018-01-01
, то вы можете взять первые 7 символов строки, чтобы получить месяц.
Затем используйте ROW_NUMBER
, чтобы разделить по месяцам и выбрать топ 100пользователи за каждый месяц.
SELECT
user_id,
created_at
FROM
(
SELECT
user_id,
created_at,
ROW_NUMBER() OVER (PARTITION BY substr(created_at, 1, 7) ORDER BY user_id) AS rn
FROM T
WHERE created_at >= '2017-11-01'
) AS R
WHERE
rn <= 100
;
ORDER BY
определяет, каких пользователей выбрать.Приведенный выше запрос выбирает 100 лучших пользователей по их идентификатору, который, вероятно, будет в том порядке, в котором они были созданы, поэтому запрос по сути выбирает первые 100 пользователей, которые были созданы каждый месяц.
Если вы хотите какой-то случайный выбор,затем упорядочить по функции, которая возвращает случайное число.Это было бы больше похоже на «образец».
SELECT
user_id,
created_at
FROM
(
SELECT
user_id,
created_at,
ROW_NUMBER() OVER (PARTITION BY substr(created_at, 1, 7) ORDER BY random()) AS rn
FROM T
WHERE created_at >= '2017-11-01'
) AS R
WHERE
rn <= 100
;