mysql 页面不存在页面不存在

anauzrmj  于 2022-10-31  发布在  Mysql
关注(0)|答案(1)|浏览(185)

我试图计算在某一天具有活动订阅的用户数。我还需要与他们所使用的订阅计划相关的信息。我有一个订阅表,其中包括订阅的开始日期和结束日期以及计划名称。我正在使用递归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;

the output should look like this

tnkciper

tnkciper1#

WITH cte AS (
    SELECT @start dt
    UNION ALL
    SELECT date_add(dt, interval 1 day) FROM cte
    WHERE dt < @end
)

您引用的是cte本身,这使它成为 * 递归 *,因此需要定义为(WITH RECURSIVE)。
这就是你所需要的:

WITH RECURSIVE cte AS (
    SELECT @start dt
    UNION ALL
    SELECT date_add(dt, interval 1 day) FROM cte
    WHERE dt < @end
)

相关问题