重复记录的取最新一笔

来源:未知 责任编辑:责任编辑 发表时间:2014-03-23 22:30 点击:

一位网友在Insus.NET下班时问及一个SQL问题,他有如下一些记录:
S_NUMBER       P_NO     UPDATE_TIME
Y1202022524   E3465   2012-02-05 16:32:16.000
Y1202022524   E0035   2012-01-16 05:38:41.000
Y1202022525   E0036   2012-01-17 05:38:41.000
Y1202022526   E0037   2012-01-18 05:38:41.000
Y1202022527   E0038   2012-01-19 05:38:41.000
Y1202022528   E0039   2012-01-20 05:38:41.000
Y1202022529   E0040   2012-01-21 05:38:41.000
 
要SELECT所有记录,过滤所有重复[S_NUMBER]的记录,只取[UPDATE_TIME]最新的一笔。
下面是Insus.NET帮他解决的方法与过程:
创建一个临时表#Data
CREATE TABLE [#Datas]
(
    S_NUMBER NVARCHAR(30),
    P_NO NVARCHAR(30),
    UPDATE_TIME DATETIME
)

 
把数据插入这个临时表中:
INSERT INTO [#Datas] VALUES
('Y1202022524', 'E3465', '2012/02/05 16:32:16'),
('Y1202022524', 'E0035', '2012/01/16 05:38:41'),
('Y1202022525', 'E0036', '2012/01/17 05:38:41'),
('Y1202022526', 'E0037', '2012/01/18 05:38:41'),
('Y1202022527', 'E0038', '2012/01/19 05:38:41'),
('Y1202022528', 'E0039', '2012/01/20 05:38:41'),
('Y1202022529', 'E0040', '2012/01/21 05:38:41')

GO
 
下面SELECT是在MS SQL Server 2008 R2查询分析器实现:
WITH it([S_NUMBER],[UPDATE_TIME])
AS
(
    SELECT [S_NUMBER],MAX([UPDATE_TIME]) FROM [dbo].[#Datas] GROUP BY [S_NUMBER]   
)
SELECT DISTINCT d.[S_NUMBER],[P_NO],d.[UPDATE_TIME]
FROM [dbo].[#Datas] AS d
INNER JOIN it
 ON (d.[S_NUMBER] = it.[S_NUMBER] and d.[UPDATE_TIME] = it.[UPDATE_TIME]);
 
执行结果:





作者 Insus.NET
 

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • sql常见面试题
    • SQL SERVER 2005性能之跟踪
    • SQL编程(一)
    • LINUX上RMAN自动备份脚本
    • sql server面试题
    • 如何将多个SQL查询统计结果一次显示出来
    • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
    • SQL小技巧系列 --- 行转列合并
    • sql server 列转行
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1