이 배지들에 중독된 것 같습니다
그래서 이 배지는 오전 1시부터 오전 5시 사이에 게시글을 작성한 사용자에게 매일 갱신되어 지급될 예정입니다.
하지만 불행히도 해당 시간대를 선택하는 방법을 전혀 모르겠습니다. 도움을 주시면 감사하겠습니다.
SELECT user_id, current_timestamp granted_at
FROM badge_posts p
WHERE p.created_at > CURRENT_DATE /* '오전 1시'와 '오전 5시' 사이를 어떻게 표현할까요? */
GROUP BY user_id
HAVING count(*) >= 100
SELECT
user_id,
current_timestamp granted_at
FROM badge_posts p
WHERE p.created_at::time BETWEEN '01:00' AND '05:00'
GROUP BY user_id
HAVING count(*) >= 100
도와주셔서 정말 감사합니다. 예시를 시도해 보았지만 미리보기에 배지가 표시되지 않습니다. 여기 시간은 오전 11:17이고, 예시에서 시간을 10:00~13:00 사이로 변경한 후 데모 주제와 답글을 생성해 보았지만 아무것도 표시되지 않습니다. 다음도 시도해 보았습니다:
SELECT
user_id,
current_timestamp granted_at
FROM badge_posts p
WHERE p.created_at:: time >= '10:00:00' or p.created_at:: time < '13:00:00'
GROUP BY user_id
HAVING count(*) >= 100
HAVING count(*) >= 100 제약 조건을 추가했기 때문에 배지를 받지 못하고 있습니다. 따라서 해당 시간 구간에 100개 이상의 게시물을 작성해야만 배지를 획득할 수 있습니다.
SELECT
user_id,
current_timestamp granted_at
FROM badge_posts p
WHERE p.created_at::time BETWEEN '02:00' AND '06:00'
GROUP BY user_id
HAVING count(*) >= 100
아, 맞다! 그걸 깜빡했네요. 작동하네요. 너무 많은 부탁은 아닌지 모르겠지만, 사용자가 프로필에서 선택한 시간을 기준으로 그 시간 확인을 할 수 있을까요? 그렇지 않으면 유럽 외 지역 등에 사는 사람들을 위해 포럼이 “시계 지킴이” 배지로 가득 차 버릴 겁니다 정말 감사합니다!
WITH users_timezone AS (
SELECT
user_id,
CASE WHEN utc_offset IS NULL THEN '00:00:00'
ELSE utc_offset END
FROM user_options uo
LEFT JOIN pg_timezone_names pt ON uo.timezone = pt.name
)
SELECT
p.user_id,
current_timestamp granted_at
FROM badge_posts p
INNER JOIN users_timezone ut ON ut.user_id = p.user_id
WHERE (p.created_at+ut.utc_offset)::time BETWEEN '01:00' AND '05:00'
GROUP BY p.user_id
HAVING count(*) >= 100