我试图计算在某一天具有活动订阅的用户数。我还需要与他们所使用的订阅计划相关的信息。我有一个订阅表,其中包括订阅的开始日期和结束日期以及计划名称。我正在使用递归cte来找出一个日期范围内不同计划的订阅者数量,但我得到的错误是cte表不存在。我使用了下面的代码。
SET @start = (SELECT MIN(start_date) FROM subscriptions);
SET @end = (SELECT MAX(end_date) FROM subscriptions);
WITH cte AS (
SELECT @start dt
UNION ALL
SELECT date_add(dt, interval 1 day) FROM cte
WHERE dt < @end
)
SELECT cte.dt, SUM(CASE WHEN subscriptions.plan_name IS NULL THEN 0 ELSE 1 END) FROM cte
LEFT JOIN subscriptions t
ON cte.dt BETWEEN t.start_date AND t.end_date
GROUP BY cte.dt;
1条答案
按热度按时间tnkciper1#
您引用的是
cte
本身,这使它成为 * 递归 *,因此需要定义为(WITH RECURSIVE
)。这就是你所需要的: