@givemoneybiatch
Немного веб, немного гейм

Как посчитать количество отправленных сообщений пользователю?

Нужно выбрать пользователей, которым отправлено больше N уведомлений за последние 24 часа.
Есть две таблицы:
1. public.user
create table public.user
(
  "id" serial primary key,
  "email" varchar(30) unique not null
);

2. public.notification
create table public.notification
(
  "id" serial PRIMARY KEY,
  "user_id" serial REFERENCES public.user (id) ON DELETE CASCADE,
  "sent_timestamp" timestamp default current_timestamp
);

Скрипт, которым выбираю пользователей. При этом, на вход подается список пользователей, так сказать "подозреваемых", т.е. мы ищем не по всем-всем пользователям в базе, а только по суженному списку.
SELECT public.user.email
    FROM public.user 
    WHERE public.user.email IN ('test1@test.com', 'test2@test.com')
    AND 
    (
      SELECT COUNT (*) FROM
        (SELECT *
            FROM public.user 
            INNER JOIN public.notification ON public.user.id = public.notification.user_id
            WHERE public.notification.sent_timestamp > NOW() - (1440 * interval '1 minute')
        ) as c
        
      WHERE public.user.email IN ('test1@test.com', 'test2@test.com')
      ) > 10
    ;

Но в результате получается, что считается общее количество отправленных уведомлений всем "подозреваемым".
Помогите, пожалуйста, второй час не соображу как лучше сделать
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
@grinat
SELECT *, count(*) as notifyCount FROM public.notification
тут джойны если надо
group by user_id
WHERE sent_timestamp > бу-бу
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы