我有两张桌子。一张桌子有分配给每位顾客的优惠券,另一张桌子有每位顾客的兑换信息。我基本上只需要留下为每个广告系列兑换的优惠券,如果 UPC 与两个广告系列重叠,它将同时计入两个广告系列(但不会在一个广告系列中计算两次)。这是兑换表的想法
| customer_id | UPC | redeem_date_id |
|-------------|------|----------------|
| 1234 | 3456 | 42 |
| 1234 | 3456 | 43 |
| 1234 | 3456 | 44 |
| 1234 | 3456 | 49 |
分配优惠券的表格看起来像
| customer_id | campaign_id | UPC | print_date_id | expire_date_id |
|-------------|-------------|------|---------------|----------------|
| 1234 | 1 | 3456 | 35 | 45 |
| 1234 | 1 | 3456 | 40 | 50 |
| 1234 | 2 | 3456 | 41 | 51 |
在此示例中,客户的兑换次数多于分配的优惠券(因为他们可能在某处剪下优惠券等),但他们分配的优惠券也可能多于兑换次数。
显然,如果我做一个
where a.customer_id = b.customer_id and a.upc=b.upc and
redeem_date_id between print_date_id and expire_date_id
我将获得比我需要的更多的记录。我不希望每次活动都计算多次相同的兑换,并且我不希望获得比原来更多的优惠券。例外情况是,不同的活动可以计算相同的兑换,但不能在一个活动中计算。(因此,如果赎回表只有第一个观察结果,我希望输出表有两个赎回 - 一个用于活动 1 中的任一优惠券 - 我不在乎哪个 - 一个用于活动 2。)
这确实是一个分配问题——在一个活动中,我想在兑换表中查找匹配项——加入它——然后为下一次观察寻找匹配项(不重复使用第一个匹配的兑换)。因此,输出表的许多可能方式之一是:
| customer_id |campaign_id|UPC |print_date_id|expire_date_id|redeem_date_id|
|-------------|-----------|----|-------------|--------------|--------------|
| 1234 | 1 |3456| 35 | 45 | 42 |
| 1234 | 1 |3456| 40 | 50 | 43 |
| 1234 | 2 |3456| 41 | 51 | 42 |
任何帮助是极大的赞赏