SELECT user_id, current_timestamp AS granted_at
FROM badge_posts p
WHERE p.created_at > CURRENT_DATE /* 如何在 '1AM' 和 '5AM' 之间筛选?*/
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
SELECT
user_id,
current_timestamp AS 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