当前位置: 代码迷 >> Sql Server >> 下表淘选并增加几个字段
  详细解决方案

下表淘选并增加几个字段

热度:72   发布时间:2016-04-24 10:12:43.0
下表筛选并增加几个字段?
原始表:
计算机名 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 行受影响)
  相关解决方案