原始表:
计算机名 MAC地址 创建日期
A_A 00:00:00:00:00:01 2014/8/4 7:58
B 00:00:00:00:00:02 2014/8/4 0:00
C 00:00:00:00:00:03 2014/8/3 0:00
B_B 00:00:00:00:00:02 2014/8/3 0:00
A 00:00:00:00:00:01 2014/8/2 14:03
C 00:00:00:00:00:03 2014/8/2 14:03
B 00:00:00:00:00:02 2014/8/2 14:03
要筛选出的结果:
计算机名 MAC地址 创建日期 最早创建日期 条数(监控天数)
A_A 00:00:00:00:00:01 2014/8/4 7:58 2014/8/2 14:03 2
B 00:00:00:00:00:02 2014/8/4 0:00 2014/8/2 14:03 3
C 00:00:00:00:00:03 2014/8/3 0:00 2014/8/2 14:03 3
要从原始表筛选出每个不同MAC地址的最新的一条记录,并且附上创建日期和总记录条数。非常感谢!
------解决方案--------------------
上面的条数有点问题,改了一下,可以用了
WITH CTE AS(
SELECT
*,ROW_NUMBER() OVER(PARTITION BY [MAC地址] ORDER BY [创建日期] DESC) cnt_desc,
ROW_NUMBER() OVER(PARTITION BY [MAC地址] ORDER BY [创建日期] DESC)+
ROW_NUMBER() OVER(PARTITION BY [MAC地址] ORDER BY [创建日期])-1 CNT
FROM #test
)
,cte2 AS(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY [MAC地址] ORDER BY [创建日期]) cnt
FROM #test
)
SELECT a.[计算机名], a.[MAC地址],a.[创建日期],b.[创建日期] AS [最早创建日期],a.cnt AS [条数] FROM cte a JOIN cte2 b ON a.[MAC地址]=b.[MAC地址]
WHERE b.cnt=1 AND a.cnt_desc=1.
计算机名 MAC地址 创建日期 最早创建日期 条数
-------------------- -------------------- -------------------- -------------------- --------------------
A_A 00:00:00:00:00:01 2014/8/4 7:58 2014/8/2 14:03 2
B 00:00:00:00:00:02 2014/8/4 0:00 2014/8/2 14:03 3
C 00:00:00:00:00:03 2014/8/3 0:00 2014/8/2 14:03 2
(3 行受影响)