Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
复杂MySQL选择查询_Mysql_Select - Fatal编程技术网

复杂MySQL选择查询

复杂MySQL选择查询,mysql,select,Mysql,Select,大家好,我仍然在关注MySQL,所以我希望有人能对此有所了解 我有一个名为customers的表,其中包含以下列 msisdn BIGINT 20 join_date DATETIME msisdn是识别客户的唯一价值 第二个表名为ws\u billing\u all,其结构如下 id INTEGER 11 (Primary Key) msisdn BIGINT 20 event_time DATETIME revenue INTEGER 因此,此表存储msisdn标识的customer

大家好,我仍然在关注MySQL,所以我希望有人能对此有所了解

我有一个名为customers的表,其中包含以下列

msisdn BIGINT 20
join_date DATETIME
msisdn是识别客户的唯一价值

第二个表名为ws\u billing\u all,其结构如下

id  INTEGER  11 (Primary Key)
msisdn BIGINT 20
event_time DATETIME
revenue INTEGER
因此,此表存储msisdn标识的customers表中每个客户的所有事务

我需要做的是确定30天后某一天加入的所有客户的数量

例如,在2010年12月2日,收购了1100家客户。根据ws_billing_all中的数据,从该日期起30天内,当天加入的客户产生了多少总收入

我可能需要另一个表来处理这个问题,但不确定,也不确定如何提取这些数据。任何帮助都将不胜感激

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()获得每位客户的总收入。

@Cularis非常接近。。。您只关心那些当天加入的客户,并希望他们在未来30天内获得全部收入。。。在这种情况下,客户在加入日期之前不会有销售,因此我没有在他们的实际销售日期上添加明确的中间值

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 )
这能更好地说明你想要什么吗?然后我们可以调整查询

最终编辑…

我想我已经达到了你的目的(还有一些可能有用的订单)。将来,提供复杂性质的示例输出会很有帮助,即使它像我在这里所做的那样简单


关于客户表中的WHERE子句。。。。假设您只关心在给定时间范围内加入的客户,或者只关心在给定日期之后加入的客户。。。这是您将更新子句的地方。。。如果您希望基于所有人,则只需将其完全删除。

谢谢,我现在就试试。有一件事,我不需要用日期之类的东西来确定那天的所有收入,而不是一天中的某个特定时间吗?我不认为我完全理解你,但在。。。而且。。。检查事件是否在加入日期和30天后之间。问题是我想按天分组,而不是按客户分组。我感兴趣的是,在某一天加入的整个客户群在30天后产生了多少收入。请参阅上面的评论,我需要按日期显示数据,然后是收入,而不是msisdn。此外,我不想指定日期,它应该检查所有日期,即任何客户started@Michael法拉,见调整,请澄清。你想看到每天收入的基础上,任何人加入或在某一特定日期后,或。。。只是那些在那一天加入的人。30天是基于此人加入的时间,还是基于您关心的开始日期。谢谢,这是基于此人加入的日期。因此,例如,我希望看到生成的数据看起来像这样,其中显示了日期以及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)