假定一个表里有各种各样的花式重复数据、
在sqlserver中如何去重是一个问题、
如果在oracle 中、存在隐藏列rowid 我们可以这样

select * from tab1  where rowid in (
select min(rowid) from tab1 group by  cloumn1,cloumn2,cloumn3 );

但是在sqlserver中没有rowid这一列、
那么问题来了、 sqlserver中怎么搞?


举个例子:
创建一个测试表:

CREATE TABLE [dbo].[z_test]([id] [uniqueidentifier] NULL DEFAULT (newid()),[num] [int] NULL,[name] [varchar](50) NULL,[CreatedAt] [datetime] NULL DEFAULT (getdate())
) ON [PRIMARY]

插入测试数据:


GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[z_test] ([id], [num], [name], [CreatedAt]) VALUES (N'9806498c-b51e-4dda-b90c-7dc7daf571cb', 1, N'zzz', CAST(N'2018-08-15 15:51:37.253' AS DateTime))
GO
INSERT [dbo].[z_test] ([id], [num], [name], [CreatedAt]) VALUES (N'0cf2e5e0-85d9-4d0e-8d75-252577e5cc2c', 2, N'aaa', CAST(N'2018-08-15 15:51:53.243' AS DateTime))
GO
INSERT [dbo].[z_test] ([id], [num], [name], [CreatedAt]) VALUES (N'237d5e8e-cf12-44a1-b52f-16118fd2289f', 3, N'zzz', CAST(N'2018-08-15 15:52:03.210' AS DateTime))
GO
INSERT [dbo].[z_test] ([id], [num], [name], [CreatedAt]) VALUES (N'03981fd4-11d0-4392-82b1-6135a45f87d5', 1, N'zzz', CAST(N'2018-08-15 15:52:08.203' AS DateTime))
GO
INSERT [dbo].[z_test] ([id], [num], [name], [CreatedAt]) VALUES (N'603607d1-9c3b-4c96-8be7-9db6465e5529', 2, N'aaa', CAST(N'2018-08-15 15:52:17.290' AS DateTime))
GO
INSERT [dbo].[z_test] ([id], [num], [name], [CreatedAt]) VALUES (N'e7419773-a55d-4bf8-9283-5f7d7f9ffa45', 4, N'bbb', CAST(N'2018-08-15 15:52:28.897' AS DateTime))
GO
INSERT [dbo].[z_test] ([id], [num], [name], [CreatedAt]) VALUES (N'237d5e8e-cf12-44a1-b52f-16118fd2289f', 3, N'zzz', CAST(N'2018-08-15 15:52:03.210' AS DateTime))
GO
INSERT [dbo].[z_test] ([id], [num], [name], [CreatedAt]) VALUES (N'6bc4b059-e1aa-4bff-a8c2-19697ab800e1', 4, N'bbb', CAST(N'2018-08-15 15:55:59.550' AS DateTime))
GO
INSERT [dbo].[z_test] ([id], [num], [name], [CreatedAt]) VALUES (N'0cf2e5e0-85d9-4d0e-8d75-252577e5cc2c', 2, N'ccc', CAST(N'2018-08-15 15:51:53.243' AS DateTime))
GO

结果如下:

select * from z_test


num与name唯一 保留创建时间最晚的一条

SELECT * FROM z_test z WHERE NOT EXISTS ( SELECT 1 FROM z_test WHERE num=z.num  AND name=z.name AND   CreatedAt > z.CreatedAt  ) ORDER BY num

结果如下:

这样还不够、 还有创建时间和ID一样的、 怎么会出现这样的数据呢、 哎、 谁知道呢、 一切皆有可能

那我们这样做:

WITH ztest1 AS (
SELECT * FROM z_test z WHERE NOT EXISTS ( SELECT 1 FROM z_test WHERE num=z.num  AND name=z.name AND   CreatedAt > z.CreatedAt  )  )
SELECT DISTINCT  * FROM ztest1  ORDER BY num


或许还有多种情况、请自行举一反三、


重点

SELECT * FROM table_name z WHERE NOT EXISTS ( SELECT 1 FROM table_name WHERE cloumn1=z.cloumn1(去重条件) AND cloumn2> z.cloumn2(规则))

NOT EXISTS ----不存在
**DISTINCT ** —去重(完全一样)

SQL server 重复数据处理 (根据条件筛选符合merge的数据)相关推荐

  1. sql server合并行_合并SQL Server复制参数化的行筛选器问题

    sql server合并行 In this article we will discuss about SQL Server Merge Replication Parameterized row f ...

  2. Sql Server 数据库,只复制表结构不复制表数据如何操作?

    Sql Server 数据库,只复制表结构不复制表数据如何操作? 1.选中要复制的数据库 2.右键 3.任务 4.生成脚本 5.弹出生成数据库对象的脚本窗口,点下一步 6.选择要编写脚本的数据库对象, ...

  3. sql server 关联left join条件on和where条件的区别

    现有两个表,商品表(products)和sales_detail(销售记录表).如下图: products:       pid pname pcode     1   商品1   AC90     ...

  4. SQL Server中,删除表,删除表中数据

    SQL Server,我们现在基本上使用的最古老的版本应该是SQL Server 2000吧,应该没有更早的版本了吧?!从SQL Server 2000开始,到SQL Server 2005,2008 ...

  5. 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-08 数据修改

    插入数据 T-SQL提供了几种数据插入的语句:INSERT VALUES.INSERT SELECT.INSERT EXEC.SELECT INTO及BULK INSERT. INSERT VALUE ...

  6. SQL : 在SQL Server 2008(Or Express)中如何Open并编辑数据表【转】

    来源:http://www.cnblogs.com/wsdj-ITtech/archive/2011/04/28/2031601.html 通常在SQL Server 2005中,我们可以通过SQL ...

  7. SQL Server如何链接到 Oracle并查询其中的数据?并实现做接口

    今天用Oracle的驱动教大家如何从SQL Server链接到Oracle. 1. 服务器上需要安装Oracle 64位的客户端或者服务端,安装过程就省略了.不会的同学可以网上搜索一下安装方法,很详细 ...

  8. 如何通过OPENROWSET函数向SQL Server导入带工作组(mdw)保护的Access数据库数据(转)...

    注:找这个解决方法很辛苦,有些笨拙,但还好,可以解决问题.适用于SQL Server 2000 原文出自:如何在链接服务器中使用 SQL Server 7.0 分布式查询来访问受保护的 Access ...

  9. 【数据库数据恢复】SQL SERVER数据库MDF (NDF)或LDF损坏怎么恢复数据?

    SQL SERVER数据库故障类型: MDF(NDF)或LDF损坏. SQL SERVER故障原因: 1.数据库正在操作过程中,机器突然断电: 2.人为误操作. SQL SERVER故障表现: 1.数 ...

最新文章

  1. 与jQuery的感情碰撞——由浅入深学jQuery
  2. 探索JAVA并发 - 并发容器全家福!
  3. 详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解 大牛讲解的
  4. 区域经济、地理信息、互联网三者交叉之行业背景分析
  5. Deleting Edges 思维 最短路 删边
  6. .net core编写转发服务(三) 接入Polly
  7. 【JavaScript】请求数据时,添加时间戳,避免浏览器缓存
  8. pdf.js插件使用记录,在线打开pdf
  9. 网站建设方案撰写需要注意哪些事项?
  10. Javascript节点的访问
  11. python 切换环境_python多环境切换及pyenv使用过程详解
  12. shell日期加减及数组循环
  13. 强化学习 马尔可夫决策过程(MDP)是什么
  14. SecureCRT配色
  15. android webview加载图片不显示,解决android webview中图片不显示问题
  16. filco蓝牙不好用_FILCO蓝牙机械键盘,超稳连接6米开外不掉线
  17. 揭秘微信红包:架构、抢红包算法、高并发和降级方案
  18. DDD如何区分实体和值对象
  19. 2021-03-08~09~10~11~12 大数据课程笔记 day47day48day49day50day51
  20. 【转载】年终总结 算法数据的思考 结尾彩蛋

热门文章

  1. 2022R1快开门式压力容器操作特种作业证考试题库及答案
  2. “file not recognized:File format not recognized“linux交叉编译时报错问题解决方法
  3. 程序猿成长之路番外篇之前后端加解密(rsa+aes混合加解密算法)
  4. 《信息安全原理》复习笔记
  5. Qt笔记(6)QString,QByteArray,char *转换
  6. 硬盘出现问题后会对计算机造成哪些影响,电脑硬盘坏道的影响有哪些?
  7. 苹果呼叫转移设置不了_不改装!不用双卡神器!亲测用苹果老机型实现“单卡双号”效果...
  8. AVR JTAG仿真器制作资料
  9. 基于SSH的宠物商城网站设计与实现
  10. E宠商城里的多个商品里主图、详情页图片怎么复制保存