【发布时间】:2016-07-19 11:28:11
【问题描述】:
我的任务是创建一个报告,该报告应显示过去 12 个月中每个月在我们环境中的不同操作系统类型的 SQL Server。
我创建了下表,并且每天都会在其中加载数据:
我需要获取过去 12 个月的每个月的操作系统类型,以便以以下格式显示:
我写了以下查询,但它是错误的。我遇到的难题是如何获取每个月最后一次数据收集的操作系统类型计数(不是每个月的最后一天),并以Mon YYYY 格式显示日期。我使用 SQL Server 2008 R2。有什么想法吗?
WITH cte AS (
SELECT OSVer = CASE OSVer
WHEN '5.0.2195' THEN 'Windows Server 2000'
WHEN '5.2.3790' THEN 'Windows Server 2003'
WHEN '6.0.6002' THEN 'Windows Server 2008'
WHEN '6.1.7600' THEN 'Windows Server 2008 R2'
WHEN '6.1.7601' THEN 'Windows Server 2008 R2 SP1'
WHEN '6.2.9200' THEN 'Windows Server 2012'
WHEN '6.3.9600' THEN 'Windows Server 2012 R2'
ELSE OSVer
END,
Date,
ROW_NUMBER() OVER (PARTITION BY DATEDIFF(DAY, 0, Date) ORDER BY Date DESC) as rn
FROM dbo.SQLMachines
WHERE OSName IS NOT NULL
)
SELECT OSVer, Count(OSVer) AS 'Count', Date
FROM cte
where rn = 1
GROUP BY OSVer, Date
ORDER BY Date DESC
【问题讨论】:
标签: sql-server tsql sql-server-2008-r2