gpt4 book ai didi

SQL 连接只允许每个表中有一个匹配项

转载 作者:行者123 更新时间:2023-12-02 08:26:37 24 4
gpt4 key购买 nike

我有两张 table 。一张 table 上有分配给每位顾客的优惠券,另一张 table 上有每位顾客的兑换信息。我基本上只需要留下为每个事件兑换的优惠券,如果 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

我将取回比我需要的更多的记录。我不希望每次事件都会多次计算相同的兑换,并且我不希望退回比原来更多的优惠券。异常(exception)情况是,相同的兑换可以在不同的事件中进行计算,但不能在一个事件中进行计算。 (因此,如果兑换表只有第一个观察值,我希望输出表有两次兑换 - 一个用于事件 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 |

非常感谢任何帮助

最佳答案

您可以使用子查询选择最小日期。像这样的东西:

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吗?可以不录吗?

我认为,虽然今天可以找到解决您问题的技术解决方案,但您记录的信息对于此类应用程序来说还不够完整。

关于SQL 连接只允许每个表中有一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16544711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com