我似乎无法确定如何处理此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”。
任何指针将不胜感激。
答案 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;