每月计数

时间:2019-04-14 12:01:26

标签: sql sql-server database sql-server-2016

我似乎无法确定如何处理此select语句。

我有一个称为Unified_assets的表,其中包含日期列firstseen和lastseen。

我需要查询的是:每月所有资产。

显然是从首次出现开始算起的,但也排除了该月份内Lastssen超过3个月的任何行。

因为这很简单,我可以算出所有的第一感。

MSSQL 16

SELECT YEAR(firstseen) Year, MONTH(firstseen) Month, COUNT(*) Count

FROM unified_assets

GROUP BY YEAR(firstseen), MONTH(firstseen)

ORDER BY YEAR(firstseen), MONTH(firstseen);

基本上我现在需要做的是添加一列,其中添加所有以前的“ firstseen”,并减去所有三个月以上的“ lastseen”。

任何指针将不胜感激。

1 个答案:

答案 0 :(得分:0)

一种方法是生成月份,然后使用相关子查询或apply进行计算。

以下内容将计算该月第一天的活动数字。它首先生成2018年的所有月份-或您感兴趣的任何范围:

with months as (
      select convert(date, '2018-01-01') as yyyymm
      union all
      select dateadd(month, 1, yyyymm)
      from months
      where yyyymm < '2018-01-12'
     )
select m.yyyymm,
       (select count(*)
        from unified_assets ua
        where ua.firstseen <= m.yyyymm and
              ua.lastseen >= m.yyyymm
       ) as cnt
from months m
order by m.yyyymm;