如何查询代理是否在拒绝时间前30秒内点击window 2并返回布尔列
实现需求的SQL查询方案
核心思路
通过子查询判断每个代理在对应拒绝时间的前30秒内是否存在符合条件的点击记录,以此生成布尔列Agent_Clicked。
SQL查询语句
SELECT r.*, EXISTS ( SELECT 1 FROM Clicklog c WHERE c.agent_name = r.agent_name AND c.action = 'window 2' AND c.cdate >= r.refuse_time - INTERVAL '30 seconds' AND c.cdate <= r.refuse_time ) AS Agent_Clicked FROM Refusals r;
逻辑说明
- 主查询直接返回
Refusals表的全部字段 EXISTS子查询针对每条拒绝记录做如下校验:- 匹配相同的
agent_name - 点击操作必须是window 2
- 点击时间
cdate落在refuse_time前30秒至refuse_time的区间内(包含两端点)
- 匹配相同的
- 若存在满足条件的点击记录,
Agent_Clicked返回TRUE,否则返回FALSE
示例验证
示例数据表
Refusals表:
| agent_name | refuse_time |
|---|---|
| John | 2024-05-20 10:00:00 |
| Sally | 2024-05-20 10:01:00 |
Clicklog表:
| cdate | agent_name | action |
|---|---|---|
| 2024-05-20 09:59:50 | John | window 2 |
| 2024-05-20 10:01:10 | Sally | window 2 |
预期输出
| agent_name | refuse_time | Agent_Clicked |
|---|---|---|
| John | 2024-05-20 10:00:00 | TRUE |
| Sally | 2024-05-20 10:01:00 | FALSE |
内容的提问来源于stack exchange,提问作者user24929248
相关产品推荐
相关产品推荐

