假设我在同一个MySQL DB中有两个表:
第一个是inbound_campaign_visit表。它看起来像这样。
+----+-----------+------------------+---------------------+ | id | user_id | inbound_campaign | date | +----+-----------+------------------+---------------------+ | 1 | 1 | 1 | 2013-02-18 13:00:00 | | 2 | 1 | 2 | 2013-02-24 13:00:00 | | 3 | 2 | 3 | 2013-01-01 01:00:00 | | 4 | 2 | 2 | 2013-02-24 19:00:00 | +----+-----------+------------------+---------------------+
每次用户因点击促销广告系列而访问我的网站时,都会生成此表格中的一行。 “日期”列表示他们来到网站的时间。
第二个表是我的交易表。
+--------+---------+---------------------+ | id | user_id | creation_date | +--------+---------+---------------------+ | 321639 | 1 | 2013-02-18 14:00:00 | | 321640 | 1 | 2013-02-24 15:00:00 | | 321641 | 1 | 2013-02-25 13:00:00 | | 321642 | 1 | 2013-04-05 12:00:00 | | 321643 | 2 | 2013-01-01 12:00:00 | | 321644 | 2 | 2013-02-23 12:00:00 | +--------+---------+---------------------+
只要事务发生,就会创建此表上的一行。 “creation_date”列表示交易发生的时间。
我想创建一个报告,计算每个入站广告系列的交易数量。必须遵守以下规则:
结果表应如下所示:
+------------------+-------------------+ | inbound_campaign | transaction_count | +------------------+-------------------+ | 1 | 1 | | 2 | 2 | | 3 | 1 | +------------------+-------------------+
请注意,事务321644和321642不计入,因为它们失败了规则1.还要注意事务321641仅适用于inbound_campaign 2而不是inbound_campaign 1(即使两个广告系列都属于规则1中定义的30天限制)。 / p>
我一直在努力解决这个问题,所以任何帮助都会受到赞赏。当然我可以在代码中执行此操作,但必须有一种方法可以在SQL中执行此操作。 TIA。
答案 0 :(得分:0)
SELECT a.inbound_campaign,
COUNT(b.user_ID) TotalCount
FROM inbound_campaign_visit a
LEFT JOIN transaction b
ON a.user_ID = b.user_ID AND
DATEDIFF(CURDATE(), b.creation_date) > 30
GROUP BY a.inbound_campaign