gpt4 book ai didi

sql - 在最近一次购买之前选择最近一次购买

转载 作者:行者123 更新时间:2023-12-02 03:15:29 25 4
gpt4 key购买 nike

我有一个看起来像这样的表格:

customer_id  purchase_date  category
1 9/1/2018 Electronics
1 9/2/2018 Art
1 9/3/2018 Books
1 9/5/2018 CPG
2 9/2/2018 Books
2 9/4/2018 Electronics
2 9/20/2018 CPG

从这里,我试图获取 CPG 购买之前的最近购买情况。为了进一步解释,这是我的步骤:

步骤 1. 创建不属于 CPG 类别的采购表:

WITH OTHERS AS(
SELECT customer_id,
category as others_category,
purchase_date
FROM orders o
WHERE category IN ('Electronics', 'Books', 'Art')
),

步骤 2. 创建 CPG 类别的采购表:

CPG AS( 
SELECT customer_id,
category as cpg_category,
purchase_date
FROM orders o
WHERE category = 'CPG'
)

第3步.左连接:这就是我被困住的地方。我想生成一个表,其中包含 CPG 购买之前最近的其他购买。即,输出应如下所示:

others_category  count_distinct_customers
Electronics 1
Books 1

理想情况下我不想使用 CTE。SQL类型是SQL Server 2017。

最佳答案

这就是我在 SQL Server 2017 中的做法,但是,我不确定这在 2005 年是否有效(不幸的是,就像我说的,我不再有 2005 年的测试环境)。我认为APPLY是在SQL Server 2008中添加的。当然,“VTE”在2005年不起作用,因为添加了VALUES构造函数子句然而,在 2008 年(如果我没记错的话),您至少将有一个可以测试的表:

WITH VTE AS(
SELECT V.customer_id,
CONVERT(date,V.purchase_date,101) AS purchase_date,
V.category
FROM (VALUES(1,'9/1/2018 ','Electronics'),
(1,'9/2/2018 ','Art'),
(1,'9/3/2018 ','Books'),
(1,'9/5/2018 ','CPG'),
(2,'9/2/2018 ','Books'),
(2,'9/4/2018 ','Electronics'),
(2,'9/20/2018','CPG')) V(customer_id,purchase_date,category))
SELECT V2.category,
COUNT(DISTINCT V2.customer_id) AS DistinctCustomers
FROM VTE V1
CROSS APPLY (SELECT TOP 1
customer_id,
purchase_date,
category
FROM VTE ca
WHERE ca.customer_id = V1.customer_id
AND ca.purchase_date < V1.purchase_date
ORDER BY ca.purchase_date DESC) V2

WHERE V1.category = 'CPG'
GROUP BY V2.category;

关于sql - 在最近一次购买之前选择最近一次购买,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55244412/

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