我有一些网站数据,显示每天对产品ID的印象和点击。该表还包含一个列,显示该产品当前是否包含在7天活动中。我想得到的印象和点击前7天,在(7天)和7天后的活动。
我目前拥有的数据如下所示:
|ID |Date |Campaign|type |imps|clicks|
|1001|20190101|No |image|100 |1 |
|1001|20190102|Yes |video|100 |5 |它显示了每天的点击量和印象,每个ID和拆分到暗淡的活动和类型。
活动持续7天,其中活动列将在7天内从否切换为是。
我想要一个名为'campaign period‘的新栏目,它是在之前、期间或之后。
为了简单起见,我想在一个月+/- 7天内查看产品。
最后,我想按活动周期和类型分组,以计算CTR。
我目前拥有的代码是一个简单的group by和imps和点击的总和,但是我不知道如何在拆分之前/期间/之后进行:
SELECT
Campaign,
type,
SUM(imps),
SUM(clicks)
FROM table
GROUP BY
Campaign,
type最终结果应该如下所示:
|Campaign Period|Type |Imps|Clicks|
|Before |Image|20 |2 |
|After |Video|30 |5 |
...我希望创建活动周期列
发布于 2019-09-13 22:30:47
您应该将其视为不同的查询,然后连接它们:
此查询将为您提供活动前的总天数
SELECT Campaign, type, SUM(imps), SUM(clicks)
FROM table
WHERE Campaign='No'
AND NOT EXISTS(SELECT id
FROM table AS t2
WHERE t2.Campaign='yes'
AND t2.type = table.type
AND t2.Date < table.Date
)
GROUP BY Id, type此查询将为您提供活动中的总天数
SELECT Campaign, type, SUM(imps), SUM(clicks)
FROM table
WHERE Campaign='Yes'
GROUP BY Id, type此查询将为您提供活动结束后的总天数
SELECT Campaign, type, SUM(imps), SUM(clicks)
FROM table
WHERE Campaign='No'
AND NOT EXISTS(SELECT id
FROM table AS t2
WHERE t2.Campaign='yes'
AND t2.type = table.type
AND t2.Date > table.Date
)
GROUP BY Id, type现在,只需将这三个查询连接起来,您就会得到预期的结果。
https://stackoverflow.com/questions/57924892
复制相似问题