Проверьте, назначен ли пользователь более чем одному собранию в течение двух последовательных дней - PullRequest
1 голос
/ 22 апреля 2020

Итак, у меня есть таблица собраний и участников этих собраний:

 id | callid | participants |    date    
----+--------+--------------+------------
  1 |      1 | {1,2}        | 2020-05-30
  2 |      2 | {1,2}        | 2020-05-01
  3 |      3 | {3,4}        | 2020-03-10

Я создал следующий запрос, чтобы изолировать reviewer_id и даты их собрания:

select *
      from (select r.id as reviewer_id, m.date as meeting_date
            from researcher r, meeting m
            where r.id = any (m.participants)
            order by r.id) u;

который дает таблицу:

 reviewer_id | meeting_date 
-------------+--------------
           1 | 2020-05-30
           1 | 2020-05-01
           2 | 2020-05-30
           2 | 2020-05-01
           3 | 2020-03-10
           4 | 2020-03-10

Теперь это та часть, где я застрял. Как я могу использовать это, чтобы определить, посещает ли рецензент более одной встречи в течение двух дней подряд?

Я пытался использовать функцию PostgreSQL datediff():

select u.reviewer_id, u.meeting_date, date_part('day', u.meeting_date - row_number() over(order by u.meeting_date))
      from (select r.id as reviewer_id, m.date as meeting_date
            from researcher r, meeting m
            where r.id = any (m.participants)
            order by r.id) u;

, но он продолжает говорить:

operator does not exist: date - bigint

Если кто-то может помочь, это будет высоко ценится.

1 Ответ

2 голосов
/ 22 апреля 2020

Проблема в том, что row_number() выводит bigint. Есть оператор -(date, integer), поэтому все, что вам нужно сделать, это привести bigint к integer:

u.meeting_date - CAST(row_number() over(order by u.meeting_date) AS integer)

Я думаю, что вы ищете такой запрос:

SELECT reviewer_id
FROM (SELECT r.id AS reviewer_id,
             m.date - 1 =
                lag(m.date) OVER (PARTITION BY r.id ORDER BY m.date)
                AS twice_in_a_row
      FROM researcher r
         JOIN meeting m
            ON r.id = ANY (m.participants)) AS q
WHERE twice_in_a_row;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...