[英]Count per month
我似乎无法思考我应该如何处理这个 select 语句。
我有一个名为 Unified_assets 的表,其中包含 firstseen 和 lastseen 等日期列。
我需要查询的是:每月所有资产。
显然从 firstseen 开始计数,但也排除了任何具有超过 3 个月的给定月份的 lastssen 的行。
我可以计算所有的第一次出现,因为这是相当直接的。
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);
基本上我现在需要做的是添加一个列,添加所有以前的“第一次看到”并减去所有超过 3 个月的“最后看到”。
任何指针将不胜感激。
一种方法是生成月份,然后使用相关子查询或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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.