【发布时间】:2020-02-10 23:48:32
【问题描述】:
我有一个业务逻辑问题,我不知道如何正确制定 sql 语句来检索它。我将简化业务模型以便于讨论。 我有一张表格,记录了哪些客户在哪一天购买了什么产品。
需要找出购买产品A后购买产品B的客户的实例。我提出了以下查询:
select t."Customer",t."Date" "Date2", t."Product" "Product2",a.*
from
(
select "Customer","Date", "Product"
from test2 where "Product"='A'
) a,
test2 t
where a."Customer"= t."Customer" and t."Product"='B' and t."Date">=a."Date"
这不太对,因为它过度计算了实例,因为如果我们查看表格,客户 1 在两次购买 A 后又购买了 B,但我的查询计数了 3 次
我圈出的实例不应该被计算在内。 有没有办法来解决这个问题? 为方便起见,我附上了创建表 TEST2 的脚本。
CREATE TABLE "TEST2"
( "Customer" VARCHAR2(26 BYTE),
"Date" DATE,
"Product" VARCHAR2(26 BYTE)
);
Insert into TEST2 ("Customer","Date","Product") values ('1',to_date('07-AUG-18','DD-MON-RR'),'A');
Insert into TEST2 ("Customer","Date","Product") values ('1',to_date('07-AUG-18','DD-MON-RR'),'B');
Insert into TEST2 ("Customer","Date","Product") values ('1',to_date('17-AUG-18','DD-MON-RR'),'A');
Insert into TEST2 ("Customer","Date","Product") values ('1',to_date('27-SEP-18','DD-MON-RR'),'B');
Insert into TEST2 ("Customer","Date","Product") values ('2',to_date('26-SEP-18','DD-MON-RR'),'A');
Insert into TEST2 ("Customer","Date","Product") values ('3',to_date('01-OCT-18','DD-MON-RR'),'C');
【问题讨论】: