Значок для постов, созданных с 1:00 до 5:00

Боюсь, я пристрастился к этим значкам :smiling_face_with_three_hearts:
Этот значок будет присваиваться пользователям, создавшим посты с 01:00 до 05:00, с ежедневным обновлением.
Но, к сожалению, я не знаю, как выбрать этот временной интервал. Любая помощь будет оценена.

SELECT user_id, current_timestamp granted_at 
FROM badge_posts p  
WHERE p.created_at > CURRENT_DATE /* Как выбрать интервал между '01:00' и '05:00'? */ 
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

И всё равно ничего не появляется :thinking:

База данных фиксирует временную метку по GMT+0, поэтому вам нужно прибавить эту разницу к вашему часовому поясу. Если вы скажете мне ваш часовой пояс, я смогу скорректировать это для вас.

Отлично. Это Европа/Брюссель, GMT +01:00.

Вы не получаете значок, потому что добавили ограничение 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

Кстати, классный дизайн бейджа: это стилизованный через CSS SVG или растровая графика?

Ого, ты прав, я об этом забыл. Всё работает. Если я не слишком прошу, можно ли сделать проверку времени на основе выбранного пользователем времени в его профиле? Иначе форум заполнится значками «Наблюдатель» :smile: (для людей, живущих вне Европы и т.д.). Большое спасибо!

Создано в Photoshop и Figma, а не стилизовано с помощью CSS. Как только я закончу дизайн и все бейджи, я опубликую URL на этом форуме.

С учётом часового пояса пользователя запрос будет выглядеть так:

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

Спасибо большое! :blush: