我有两个表。一张桌子有分配给每个顾客的优惠券,另一张桌子有每个顾客的兑换信息。我基本上只需要为每个活动兑换优惠券,如果UPC与两个活动重叠,它将被计入两次(但不会在一次活动中计算两次)。这里的redemtion表SQL连接允许每个表只有一个匹配
| 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
我会收获更多的记录回比我更需要。我不希望每次活动都有相同的赎回次数超过一次,而且我也不希望获得比原来更多的优惠券。例外情况是,对于不在一个广告系列中的不同广告系列,可以计算相同的兑现次数。 (所以如果兑换表只有第一个观察结果,我希望输出表有两个兑换 - 一个用于第一个广告系列的优惠券 - 我不在乎哪一个 - 第二个广告系列用于一个广告系列)。
这实际上是一个分配问题 - 在我希望在兑换表中查找匹配的广告系列中,加入它 - 然后查找下一个观察的匹配项(不重复使用第一个匹配的兑换项)。因此,许多可能的方式输出表可以看一个是:
| 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 |
任何帮助是通过使用子查询不胜感激
同一位客户是否可以在同一天为同一个“UPC”和同一个“活动”兑换多于一张的优惠券(即相同的“redeem_date_id”)? – 2013-05-14 14:00:14
是的,所以如果您剪下两张相同的优惠券并在一次交易中兑换,它基本上看起来就像兑换表中的两个相同的观察。 (如果你正在寻找一个唯一的标识符,我可以对这些观察数据进行编号)。 – 2013-05-14 14:49:17
我在考虑使用GROUP BY来平整表格,但需要保留正确的'print_date_id' - 'expire_date_id'对。 – 2013-05-14 15:50:41