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