假设我在同一个 MySQL DB 中有两个表:
第一个是 inbound_campaign_visit 表。它看起来像这样。
+----+------------+------------------+------------- --------+ | 编号 | 用户 ID | 入站活动 | 日期 | +----+------------+------------------+------------- --------+ | 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 | 创建日期 | +--------+---------+---------+ | 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”列表示事务发生的时间。
我想创建一个报告来计算每个入站活动的交易数量。必须适用以下规则:
- 如果 user_id 值与交易的值匹配并且交易发生在创建 inbound_campaign_visit 行的 30 天内,则认为交易与入站活动相关。
- 事务只能应用于给定用户的最新入站campaign_visit。
结果表应如下所示:
+------------------+------------------+ | 入站活动 | 交易计数 | +------------------+------------------+ | 1 | 1 | | 2 | 2 | | 3 | 1 | +------------------+------------------+
请注意,事务 321644 和 321642 不计入规则 1,因为它们不符合规则 1。还要注意事务 321641 如何仅适用于 inbound_campaign 2 而不是 inbound_campaign 1(即使两个活动都在规则 1 中定义的 30 天限制范围内)。
我已经为此苦苦挣扎了一段时间,因此将不胜感激。当然我可以在代码中做到这一点,但必须有一种方法可以在 SQL 中做到这一点。TIA。