SQL server 重复数据处理 (根据条件筛选符合merge的数据)
假定一个表里有各种各样的花式重复数据、
在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的数据)相关推荐
- sql server合并行_合并SQL Server复制参数化的行筛选器问题
sql server合并行 In this article we will discuss about SQL Server Merge Replication Parameterized row f ...
- Sql Server 数据库,只复制表结构不复制表数据如何操作?
Sql Server 数据库,只复制表结构不复制表数据如何操作? 1.选中要复制的数据库 2.右键 3.任务 4.生成脚本 5.弹出生成数据库对象的脚本窗口,点下一步 6.选择要编写脚本的数据库对象, ...
- sql server 关联left join条件on和where条件的区别
现有两个表,商品表(products)和sales_detail(销售记录表).如下图: products: pid pname pcode 1 商品1 AC90 ...
- SQL Server中,删除表,删除表中数据
SQL Server,我们现在基本上使用的最古老的版本应该是SQL Server 2000吧,应该没有更早的版本了吧?!从SQL Server 2000开始,到SQL Server 2005,2008 ...
- 笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-08 数据修改
插入数据 T-SQL提供了几种数据插入的语句:INSERT VALUES.INSERT SELECT.INSERT EXEC.SELECT INTO及BULK INSERT. INSERT VALUE ...
- SQL : 在SQL Server 2008(Or Express)中如何Open并编辑数据表【转】
来源:http://www.cnblogs.com/wsdj-ITtech/archive/2011/04/28/2031601.html 通常在SQL Server 2005中,我们可以通过SQL ...
- SQL Server如何链接到 Oracle并查询其中的数据?并实现做接口
今天用Oracle的驱动教大家如何从SQL Server链接到Oracle. 1. 服务器上需要安装Oracle 64位的客户端或者服务端,安装过程就省略了.不会的同学可以网上搜索一下安装方法,很详细 ...
- 如何通过OPENROWSET函数向SQL Server导入带工作组(mdw)保护的Access数据库数据(转)...
注:找这个解决方法很辛苦,有些笨拙,但还好,可以解决问题.适用于SQL Server 2000 原文出自:如何在链接服务器中使用 SQL Server 7.0 分布式查询来访问受保护的 Access ...
- 【数据库数据恢复】SQL SERVER数据库MDF (NDF)或LDF损坏怎么恢复数据?
SQL SERVER数据库故障类型: MDF(NDF)或LDF损坏. SQL SERVER故障原因: 1.数据库正在操作过程中,机器突然断电: 2.人为误操作. SQL SERVER故障表现: 1.数 ...
最新文章
- 与jQuery的感情碰撞——由浅入深学jQuery
- 探索JAVA并发 - 并发容器全家福!
- 详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解 大牛讲解的
- 区域经济、地理信息、互联网三者交叉之行业背景分析
- Deleting Edges 思维 最短路 删边
- .net core编写转发服务(三) 接入Polly
- 【JavaScript】请求数据时,添加时间戳,避免浏览器缓存
- pdf.js插件使用记录,在线打开pdf
- 网站建设方案撰写需要注意哪些事项?
- Javascript节点的访问
- python 切换环境_python多环境切换及pyenv使用过程详解
- shell日期加减及数组循环
- 强化学习 马尔可夫决策过程(MDP)是什么
- SecureCRT配色
- android webview加载图片不显示,解决android webview中图片不显示问题
- filco蓝牙不好用_FILCO蓝牙机械键盘,超稳连接6米开外不掉线
- 揭秘微信红包:架构、抢红包算法、高并发和降级方案
- DDD如何区分实体和值对象
- 2021-03-08~09~10~11~12 大数据课程笔记 day47day48day49day50day51
- 【转载】年终总结 算法数据的思考 结尾彩蛋
热门文章
- 2022R1快开门式压力容器操作特种作业证考试题库及答案
- “file not recognized:File format not recognized“linux交叉编译时报错问题解决方法
- 程序猿成长之路番外篇之前后端加解密(rsa+aes混合加解密算法)
- 《信息安全原理》复习笔记
- Qt笔记(6)QString,QByteArray,char *转换
- 硬盘出现问题后会对计算机造成哪些影响,电脑硬盘坏道的影响有哪些?
- 苹果呼叫转移设置不了_不改装!不用双卡神器!亲测用苹果老机型实现“单卡双号”效果...
- AVR JTAG仿真器制作资料
- 基于SSH的宠物商城网站设计与实现
- E宠商城里的多个商品里主图、详情页图片怎么复制保存