求滚动总和 SQL

Finding Rolling Sum SQL

我有这个 table 字段 (campaign_launch_date, email_address_id)。向用户发送电子邮件以吸引他们购买。我想知道 email_addresses 中是否有人在 campaign_launch_date 之后的 7 天内购买了任何东西(以及订单总额)。

Table我有:
Table 1: (campaign_launch_date, email_address_id, launch_id)
Table 2: (email_address_id, user_id)
Table 3: (user_id, sales_transaction_date, order_amount)

这是我目前拥有的:

SELECT    t1.launch_id, 
          t3.user_id, 
          Sum(order_amount), 
          Count(order_amount)
FROM      t1 
JOIN      t2 
ON        t1.email_address_id = t2.email_address_id 
LEFT JOIN 
ON        t3.user_id = t2.user_id 
AND       t1.campaign_launch_date <= (t3.sales_transaction_date + interval '7' day) 
GROUP BY  1, 
          2
SELECT    t1.launch_id, 
          t3.user_id, 
          Sum(order_amount), 
          Count(order_amount)
FROM      t1 
JOIN      t2 
ON        t1.email_address_id = t2.email_address_id 
LEFT JOIN t3
ON        t2.user_id = t3.user_id 
WHERE     t1.campaign_launch_date <= (t3.sales_transaction_date + interval '7' day) 
GROUP BY  1, 
          2

我认为你的约会逻辑不对。如果我理解正确的话:

select t1.launch_id, t3.user_id, sum(order_amount), count(order_amount)
from t1 join
     t2
     on t1.email_address_id = t2.email_address_id left join
     t3
     on t3.user_id = t2.user_id and
        t3.sales_transaction_date >= t1.campaign_launch_date  and
        t3.sales_transaction_date <= t1.campaign_launch_date + INTERVAL '7' DAY)
group by 1, 2;

是这样的吗?

select t1.launch_id, t2.user_id, 
sum(t3.order_amount) as order_amount, 
count(t3.order_amount) as total_orders
from Table1 as t1 
join Table2 as t2 on t2.email_address_id = t1.email_address_id
left join Table3 as t3 on (t3.user_id = t2.user_id and t3.sales_transaction_date between t1.campaign_launch_date and (t1.campaign_launch_date + INTERVAL '7' DAY))
group by t1.launch_id, t2.user_id