求滚动总和 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
我有这个 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