WITH moderator_role_dates AS (
SELECT
gu.user_id,
MIN(gu.created_at) AS role_granted_date
FROM
group_users gu
JOIN groups g ON gu.group_id = g.id
WHERE
g.name = 'moderators'
GROUP BY
gu.user_id
),
current_date_info AS (
SELECT
CURRENT_DATE AS today
)
SELECT
mrd.user_id,
u.username,
mrd.role_granted_date,
cdi.today,
(cdi.today - mrd.role_granted_date) AS days_in_role
FROM
moderator_role_dates mrd
JOIN users u ON mrd.user_id = u.id,
current_date_info cdi
ORDER BY
days_in_role DESC
-- [params]
-- int :years
WITH time_in_mod_group AS (
SELECT
user_id,
(CURRENT_DATE - created_at::date) AS days_as_mod
FROM group_users
WHERE group_id = 2 -- 'moderator' グループのグループID
AND user_id > 0 -- システムユーザーとボットを除く
)
SELECT
user_id,
days_as_mod
FROM time_in_mod_group
WHERE days_as_mod > (365 * :years)