sql - 每月计算
问题描述
我似乎无法理解我应该如何处理这个 select 语句。
我有一个名为 Unified_assets 的表,其中包含 firstseen 和 lastseen 等日期列。
我需要查询的是:每月所有资产。
显然从 firstseen 开始计算,但也排除了该给定月份持续时间超过 3 个月的任何行。
我可以计算所有的第一次看到,因为这是相当直截了当的。
微软 SQL 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”并减去所有超过 3 个月的“lastseen”。
任何指针将不胜感激。
解决方案
一种方法是生成月份,然后使用相关子查询或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;
推荐阅读
- python-3.x - X 轴上的年份值显示不正确
- .net - 具有 NTLM 身份验证的 ubuntu 自定义 nuget 提要
- javascript - 当用户第一次将鼠标悬停在标签上时,如何从字段集标签中删除 css 样式?
- python - 世界每分钟定期任务芹菜
- python - 如何避免 arg kwargs 不可变?
- javascript - 在同一组件 React 中捕获链接单击
- flutter - 在颤动中使用底部导航选项卡时显示页面时出现问题
- ios - 斯威夫特:配件问题
- javascript - 如何在浏览器的新标签页上显示 Base64 图像?
- react-native - 反应导航,获取嵌套路线的名称