我有两张桌子。一个表具有分配给每个客户的优惠券,另一个表具有针对每个客户的兑换信息。我基本上只需要为每个广告系列保留兑换的优惠券,如果UPC重叠两个广告系列,则会计入两个广告系列(但在一个广告系列中不计算两次)。这是一个关于redemtion表的想法
| 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 |
非常感谢任何帮助
答案 0 :(得分:0)
您可以使用子查询选择最小日期。类似的东西:
select *
from a inner join b
on a.customer_id = b.customer_id
and a.upc = b.upc
and redeem_date_id between print_date_id and expire_date_id
where b.print_date_id = (
select min(print_date_id)
from b as b2
where b2.customer_id = a.customer_id
and b2.upc = a.upc
and a.redeem_date_id between b2.print_date_id and b2.expire_date_id
)
虽然我还没有测试过它。
但还有别的事情困扰着我。检查优惠券
| customer_id | campaign_id | UPC | print_date_id | expire_date_id |
|-------------|-------------|------|---------------|----------------|
| 1234 | 1 | 3456 | 35 | 45 |
和您的兑换数据
| customer_id | UPC | redeem_date_id |
|-------------|------|----------------|
| 1234 | 3456 | 42 |
| 1234 | 3456 | 43 |
他们没有任何信息可以区分在第35-45天有效的优惠券是否在第42或43天被兑换。
换句话说,某些信息似乎丢失了:此时兑换的优惠券是哪个?每张优惠券都没有唯一的ID吗?你能记录下来吗?
我认为虽然今天可以为您的问题找到技术解决方案,但您不会记录足够完整的此类应用程序的信息。