你仍然关注MySQL,所以希望有人能够对这个问题有所了解
我有一个名为 customers 的表,其中包含以下列
msisdn BIGINT 20
join_date DATETIME
msisdn是识别客户的独特价值。
有一个名为 ws_billing_all 的第二个表,它具有以下结构
id INTEGER 11 (Primary Key)
msisdn BIGINT 20
event_time DATETIME
revenue INTEGER
因此,此表存储了由msisdn确定的customers表中每个客户的所有交易。
我需要做的是确定30天后特定日期加入的所有客户的金额。
例如,2010年12月2日,收购了1,100名客户。根据ws_billing_all中的数据,当天加入的客户从此日期开始生成30天的总收入。
我可能需要另一张表,但不确定并且真的不确定如何提取这些数据。任何帮助将不胜感激。
答案 0 :(得分:1)
SELECT c.msisdn, SUM(w.revenue)
FROM customers c
INNER JOIN ws_billing_all w ON c.msisdn=w.msisdn
WHERE w.event_time BETWEEN c.join_date AND DATE_ADD(c.join_date, INTERVAL 30 DAY)
GROUP BY c.msisdn
您必须在客户ID上加入两个表。然后选择在加入日期和之后30天之间发生的所有事件。按客户ID分组并使用SUM()获取每个客户的总收入。
答案 1 :(得分:1)
SELECT
date( c.Join_Date ) DateJoined,
count( distinct c.msisdn ) DistinctMembers,
count(*) NumberOfOrders,
SUM(w.revenue) AmountOfRevenue
FROM
customers c
JOIN ws_billing_all w
ON c.msisdn = w.msisdn
AND date( w.event_time ) <= date_add( c.Join_Date, INTERVAL 30 DAY )
WHERE
c.Join_Date >= SomeDateParameterValue
group by
date( c.Join_Date )
order by
date( C.Join_Date )
如果您在12月1日有150人加入,12月2日有45人,12月3日有83人,您希望看到每组人员的总收入基于他们加入30天销售的那天。 ..所以...
Joined on Number of People Total Revenue after 30 days
Dec 1 150 $21,394 (up to Dec 31)
Dec 2 45 $ 4,182 (up to Jan 1)
Dec 3 83 $ 6,829 (up to Jan 2)
这会更好地澄清你想要的吗?然后我们可以调整查询...
最终编辑......
我认为我有你想要的东西(也有可能有用的订单数量)。将来,提供复杂性质的样本输出会很有帮助,即使它像我在这里一样简单。
关于来自customers表的我的WHERE子句....假设您只关心在给定时间范围内加入的客户,或者仅在给定日期之后加入......这是您更新条款的地方..如果你想要基于所有人,那么就完全删除它。