sql - 查询过去一年的活跃订阅者数和订阅数(按天)

标签 sql date plsql

我正在寻求编写一个查询,使我能够捕获过去一年(按天)的活跃订阅者和订阅数量。例如,下面的查询将告诉我们 2013 年 6 月 2 日至 2014 年 6 月 1 日期间任意时间的唯一订阅者和活跃订阅的数量。

SELECT      count(distinct(user_id)) as subscribers, 
            count(distinct(subscription_id)) as subscriptions
FROM        dataset
WHERE       (start_date <= to_date('01JUN2014:23:59:59','DDMONYYYY:HH24:MI:SS') and 
            end_date >= to_date('02JUN2013:00:00:00','DDMONYYYY:HH24:MI:SS')) and
            payment_amt > 0;

话虽如此,我正在寻求一个查询,允许我同时捕获所有活跃订阅者和过去 12 个月内活跃的活跃订阅(过去 365 天按天)。我正在寻找的最终数据集看起来像这样(365 行;3 列):

Ref_Date     Subscribers        Subscriptions
6/1/2014        100              150
6/2/2014        101              153
…                 …               …
5/30/2015       106              160
5/31/2015       104              155

此外,对于本文中的查询,上表中“Ref_Date”的值为“6/1/2014”。我只想通过一次数据提取对所有 365 个“Ref_Date”执行此操作。 有人可以提供任何帮助吗?非常感谢!

最佳答案

您需要创建一个日期表并将其连接到数据。下面的示例使用来自同一数据集的派生表来生成日期列表。

查询:

SELECT Ref_date
    ,count(DISTINCT (user_id)) AS subscribers
    ,count(DISTINCT (subscription_id)) AS subscriptions
FROM (
    SELECT DISTINCT start_date AS ref_date
    FROM dataset
    WHERE start_date BETWEEN DATEADD(YYYY,-1,CURRENT_DATE) and CURRENT_DATE
    ) dateslist
INNER JOIN dataset ON start_date < DATEADD(YYYY, 1, ref_date)
    AND end_date >= ref_date

关于sql - 查询过去一年的活跃订阅者数和订阅数(按天),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31007255/

相关文章:

mysql - 如何从两个不同的表中获取结果?

计算 C 中两个 ISO 8601 日期(包括毫秒)之间的差异

javascript - 如何在 html 中将 JSON 显示为格式化 View

sql - 每 30 秒运行一次 oracle 查询 (SQL),一旦计数等于 8,它应该继续进行并完成工作

sql - 将 LONG 转换为 VARCHAR2 或某种文本数据类型

SQL Server 将 xml 值读取为空字符串

sql - SQL 查询中的参数化表名

Javascript:转换日期或除以 1

oracle - 如何在 PL/SQL (Oracle) 中发送电子邮件?

oracle - 如何调用 plsql 过程