배지 SQL로 설정해 본 적은 없지만, 모더레이터 역할의 일수를 조회하는 데이터 탐색기 쿼리는 다음과 같습니다:
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
방금 이 질문에 sql-triggered-badge 태그를 달았지만, 자동 생성 배지를 원하시는지 아니면 수동으로 처리할 수 있는지에 대해 확인해 보고 싶었습니다. 아마도 사용자가 많이 없으시니 데이터 탐색기 쿼리를 기반으로 이 배지를 수동으로 부여할 수도 있을 것 같습니다.
위 쿼리의 단순화된 버전은 다음과 같습니다:
-- [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)
이 쿼리는 SQL 배지 세트가 아니라 데이터 탐색기 쿼리로 작동하며, 조건에 맞는 사용자 목록을 추출하여 수동으로 배지를 부여할 수 있도록 합니다.
단, 사용자가 중간에 모더레이터 그룹을 탈퇴했다가 다시 가입한 경우, 가장 최근 가입 기간만 계산됩니다. user_histories 테이블을 활용하여 이 문제를 우회할 수 있을 것으로 생각되지만, 예외적인 상황이므로 수동으로 처리하는 것이 더 쉽습니다.