【问题标题】:Monthly Count with Daily records每日记录的每月计数
【发布时间】:2019-05-14 12:16:41
【问题描述】:

我使用信用卡帐户。每天,每个帐户都会向我们的数据库添加一条记录。有关联的数据(与此无关),但如果帐户处于活动状态或现在,有一列显示布尔值 (1,0),以及该记录的日期

数据看起来有点像这样

ACCOUNT     DATA1     DATA2     ISACTIVE      INSERT DATE
1234        XXX       XXXX       1             5/1/2019
1234        XXX       XXXX       1             5/2/2019
1234        XXX       XXXX       1             5/3/2019
1234        XXX       XXXX       1             5/4/2019
5678        XXX       XXXX       1             5/1/2019
5678        XXX       XXXX       1             5/2/2019
5678        XXX       XXXX       1             5/3/2019
5678        XXX       XXXX       1             5/4/2019

我希望计算大约 18 个月前每月(基于每月 1 日)活跃的帐户的不同数量。不过,我不确定如何为此编写代码。

感谢您的帮助

【问题讨论】:

  • 使用该示例表数据(或更新),同时指定预期结果。
  • 您使用的是哪个 dbms? (当涉及到日期/时间时,许多产品远不符合 ANSI SQL。)
  • dbms:MSSQL 16 预期结果 2017 年 5 月:1500 2017 年 6 月:1550 等

标签: sql sql-server


【解决方案1】:
SELECT Count(DISTINCT account) 
FROM   t 
WHERE  isactive = 1 
GROUP  BY Month(insert_date), 
          Year(insert_date) 

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT YEAR([INSERT DATE]) AS [Year], MONTH([INSERT DATE]) AS [Month], COUNT(DISTINCT [Account]) AS [UniqueActiveAccounts]
    FROM [YourTableName]
    WHERE [ISACTIVE] = 1 AND [INSERT DATE] > DATEADD(MONTH,-19,GETDATE())
    GROUP BY YEAR([INSERT DATE]), MONTH([INSERT DATE])
    

    此查询获取自您运行此查询起 18 个月前的数据。您可以在查询的 DATEADD 部分调整此期间。

    您当然需要在FROM之后插入您的表格名称。

    【讨论】:

      【解决方案3】:

      您可以尝试按月分组(INSERT DATE):

      SELECT month([INSERT DATE]) as month_num,count(distinct ACCOUNT) as ACCOUNT_num
      from table
      group by month([INSERT DATE])
      

      【讨论】:

      • 我将如何计算多年?
      • 其他人已回复,但您可以 year([INSERT DATE]) *100 + month([INSERT DATE])) 按年和月分组。
      猜你喜欢
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多