SQL 查询以准确考虑最后 3 封电子邮件发送计数,然后 return 相应的点击计数
SQL query to consider exactly last 3 email send count and then return the respective click count
我有一个 table - 'clicks_plus_noClicks_raw' 如下所示
EmailAddress sentdate clickdate pid
a@gmail.com 15 August 2021 23:30 4000
b@gmail.com 15 August 2021 23:30 5000
b@gmail.com 15 August 2021 23:30 5000
b@gmail.com 15 August 2021 23:30 5000
b@gmail.com 16 August 2021 23:30 5000
c@gmail.com 16 August 2021 23:30 17 August 2021 23:30 5000
b@gmail.com 16 August 2021 23:30 8000
Expected results
EmailAddress pid count
b@gmail.com 5000 0
如果客户没有点击我们发送的最后 3 封电子邮件中的任何一封(正好 3 封),我想将结果添加到最终 table 中,计数为 0。
a@gmail.com & b@gmail.com 应该被跳过,因为我们给他们发了 3 封邮件 yet.The 最终结果应该只针对我们发了 3 封邮件的人。
我有这个查询,但查询甚至计算最后 1 次发送,这不是我想要的。
select t1.EmailAddress, t1.pid,count(case when rn <= 3 then t1.clickdate else null end) as Clickcount
from (
select t1.EmailAddress,
t1.pid,
row_number() over(partition by t1.EmailAddress, t1.pid order by t1.sentdate desc) rn,
t1.clickdate
from clicks_plus_noClicks_raw t1
) t1
group by t1.EmailAddress,t1.pid
您需要在查询中使用 HAVING
子句来检查电子邮件数量,并需要 WHERE
子句来 return 只有最后 3 封电子邮件:
SELECT EmailAddress,
pid,
COUNT(clickdate) count
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY EmailAddress, pid ORDER BY sentdate DESC) rn
FROM clicks_plus_noClicks_raw
) t
WHERE rn <= 3
GROUP BY EmailAddress, pid
HAVING COUNT(*) >= 3;
参见demo。
我有一个 table - 'clicks_plus_noClicks_raw' 如下所示
EmailAddress sentdate clickdate pid
a@gmail.com 15 August 2021 23:30 4000
b@gmail.com 15 August 2021 23:30 5000
b@gmail.com 15 August 2021 23:30 5000
b@gmail.com 15 August 2021 23:30 5000
b@gmail.com 16 August 2021 23:30 5000
c@gmail.com 16 August 2021 23:30 17 August 2021 23:30 5000
b@gmail.com 16 August 2021 23:30 8000
Expected results
EmailAddress pid count
b@gmail.com 5000 0
如果客户没有点击我们发送的最后 3 封电子邮件中的任何一封(正好 3 封),我想将结果添加到最终 table 中,计数为 0。
a@gmail.com & b@gmail.com 应该被跳过,因为我们给他们发了 3 封邮件 yet.The 最终结果应该只针对我们发了 3 封邮件的人。
我有这个查询,但查询甚至计算最后 1 次发送,这不是我想要的。
select t1.EmailAddress, t1.pid,count(case when rn <= 3 then t1.clickdate else null end) as Clickcount
from (
select t1.EmailAddress,
t1.pid,
row_number() over(partition by t1.EmailAddress, t1.pid order by t1.sentdate desc) rn,
t1.clickdate
from clicks_plus_noClicks_raw t1
) t1
group by t1.EmailAddress,t1.pid
您需要在查询中使用 HAVING
子句来检查电子邮件数量,并需要 WHERE
子句来 return 只有最后 3 封电子邮件:
SELECT EmailAddress,
pid,
COUNT(clickdate) count
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY EmailAddress, pid ORDER BY sentdate DESC) rn
FROM clicks_plus_noClicks_raw
) t
WHERE rn <= 3
GROUP BY EmailAddress, pid
HAVING COUNT(*) >= 3;
参见demo。