我有一张这样的桌子:
Date | Action | Ad_ID | Device_ID
--------+--------+-------+-----------
5/13/19 | click | 342 | 22289
5/14/19 | view | 342 | 22289
我需要编写一个查询,以获取在一天中至少点击了一个广告的用户数量,以及第二天第二次查看广告的第一组用户的数量。
我将如何处理?我对SQL还是很陌生,并试图在工作中使用它:)
答案 0 :(得分:0)
我建议使用CTE和自我LEFT JOIN
,并进行汇总:
WITH cte AS (SELECT DISTINCT date, device_id, action FROM mytable t)
SELECT
c.date,
COUNT(c.device_id) clicked,
COUNT(v.device_id) viewed_the_next_day
FROM cte c
LEFT JOIN cte v
ON v.date = c.date + INTERVAL '1 day'
AND v.device_id = c.device_id
AND v.action = 'view'
WHERE x.action = 'click'
GROUP BY c.date
CTE生成唯一的date/device_id/action
元组的列表(根据您的实际数据结构,此步骤可能不是必需的)。然后,LEFT JOIN
会将在一天中单击的关系用户与在第二天中查看的那些用户联系起来。
答案 1 :(得分:0)
我认为您正在尝试实现这样的目标?
select t1.*, t2.date, t2.action
from tableA t1
left join tableA t2
on t1.date + INTERVAL '1 day' = t2.date
and t2.action = 'view'
and t2.Device_ID= t1.Device_ID
and t2.Ad_ID= t1.Ad_ID