sql - 检查用户是否在连续两天内被分配到多个会议
问题描述
所以,我有一张会议表和这些会议的参与者:
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
现在,这是我卡住的部分。我如何使用它来确定审阅者是否在连续两天内参加了多个会议?
我尝试过使用 PostgreSQLdatediff()
函数:
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
如果有人可以提供帮助,将不胜感激。
解决方案
问题是row_number()
输出一个bigint
. 有一个 operator -(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;
推荐阅读
- ios - 在通知期间覆盖静音开关并播放音频——比如平铺
- c++ - 我需要检查是否从 operator= 抛出异常?
- javascript - 让动画在 Angular 6 组件中不起作用
- python - Vue.js + vue.router + 历史模式 + Django = 错误
- c - 检查字符串生存期
- python - 在sklearn中获取节点的决策路径
- java - JVM崩溃而不留下任何日志
- php - Laravel如何使用ajax将数据从控制器传递到模态对话
- sql - 在 BigQuery 上随机生成 True 或 False
- macos - MAC OSx Codesigning fastlane jenkins