【发布时间】:2022-01-22 14:54:43
【问题描述】:
我正在使用 CTE 创建一个表格,其中包含客户最早的 3 次购买以及该客户的购买总数。我使用下面的查询成功地做到了这一点,但它为每个用户显示了 3 行,其中第一个购买日期、第二个购买日期和第三个购买日期分别显示为单独的行。我试图将 3 个购买日期显示为列,而不是每个用户一行。
此表有数百行,因此我无法在代码中编写所需的用户 ID。有任何想法吗?有没有办法合并 3 个 CTE 或编写代码以将用户的最早付款日期、最早的第二个、最早的第三个和总金额作为列吐出。当前代码如下:
WITH cte_2
AS (SELECT customer_id,
payment_date,
Row_number()
OVER (
partition BY customer_id
ORDER BY payment_date ASC) AS purchase_number
FROM payment)
SELECT cte_2.customer_id,
cte_2.payment_date,
cte_2.purchase_number,
Count(payment_id) AS total_payments
FROM payment
INNER JOIN cte_2
ON payment.customer_id = cte_2.customer_id
WHERE purchase_number <= 3
GROUP BY cte_2.customer_id,
cte_2.payment_date,
purchase_number
ORDER BY customer_id ASC
【问题讨论】:
-
你能给我们一个reproducible example,即输入/预期输出吗?
-
刚刚添加,谢谢。基本上,是否可以限制 CTE 内的行/购买数量,以便我可以将它们联合起来?是否有可能以某种方式在 SELECT 中多次列出 purchase_number?
-
您需要 SQL 解决方案还是 pandas 解决方案?
-
感谢熊猫解决方案!你有什么方法知道如何在 SQL 中处理?试图弄清楚两者。
-
不是我的专业领域,抱歉。然而,pivot 也存在于 SQL 中:docs.microsoft.com/en-us/sql/t-sql/queries/…
标签: sql pandas union common-table-expression