【问题标题】:Count of Distinct Items by cumulative grouping按累积分组的不同项目计数
【发布时间】:2019-05-08 03:48:36
【问题描述】:

我有以下查询,它对每个所有者进行不同的项目计数,按月分组

查询:

SELECT owner, Month(date) AS month, Count(DISTINCT( item )) AS cnt
        FROM   table_name
        WHERE  impact < 3
               AND group IN ( 'Group1', 'Group2', 'Group3')
               AND date >= '2019-01-01'
               AND date <= '2019-05-02 23:59:59'
        GROUP  BY owner, month
        ORDER  BY owner, month; 

这会为每个所有者生成每个月的不同项目计数。我想要的是每个所有者累积月份的不同项目计数。对于 2 月,我想要从 1 月到 2 月为每个所有者计算不同项目。对于 3 月,我想要从 1 月到 3 月为每个所有者计算不同项目,依此类推。有人可以帮忙看看这是怎么做的吗?

【问题讨论】:

  • 更新您的问题添加适当的数据样本和预期的结果..

标签: mysql sql database


【解决方案1】:

如果我理解正确,您需要基于项目第一次出现在所有者面前的累积计数。在 MySQL 8+ 中,您可以使用窗口函数:

SELECT owner, Month(date) AS month,
       COUNT(*) as this_month_cnt,
       SUM(COUNT(*)) OVER (PARTITION BY owner ORDER BY MONTH(date)) as running_cnt
FROM  (SELECT t.owner, t.item, MIN(t.date) as date
       FROM table_name
       WHERE impact < 3 AND
             group IN ( 'Group1', 'Group2', 'Group3') AND
             date >= '2019-01-01' AND
             date < '2019-05-03'
       GROUP  BY owner, item
      ) t
GROUP BY owner, month
ORDER  BY owner, month; 

【讨论】:

    猜你喜欢
    • 2015-12-08
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2014-07-26
    • 1970-01-01
    • 2015-09-11
    相关资源
    最近更新 更多