2个查询结果不一样,哪位分析下,哈哈

华夏小卒 2013-08-15 11:24:20

szy_temp里面有重复的数据

insert into szy_max
select gdsid,kqbh,gys,max(lastmodified)
from szy_temp
group by gdsid,kqbh,gys



查询1:

delete szy_temp
from szy_temp a,szy_max b
where a.gdsid = b.gdsid and a.kqbh = b.kqbh and a.gys = b.gys and a.lastmodified < b.lastmodified

select * from szy_temp


查询2:

select *
from szy_temp a,szy_max b
where a.gdsid = b.gdsid and a.kqbh = b.kqbh and a.gys = b.gys and a.lastmodified = b.lastmodified

...全文
164 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2013-08-15
  • 打赏
  • 举报
回复
我把语句改造了一下,同时运行下面3个语句:

--查询1:

--一共有多少条记录
select COUNT(*)
from szy_temp


--计算lastmodified小于最大值的记录数,也就是要删除多少条记录
select COUNT(*) 
from szy_temp a,szy_max b 
where a.gdsid = b.gdsid and a.kqbh = b.kqbh and a.gys = b.gys and a.lastmodified < b.lastmodified 



--查询2:

--计算lastmodified等于最大值的记录数,也就是删除后剩余的记录数
select COUNT(*)   
from szy_temp a,szy_max b 
where a.gdsid = b.gdsid and a.kqbh = b.kqbh and a.gys = b.gys and a.lastmodified = b.lastmodified 

Shawn 2013-08-15
  • 打赏
  • 举报
回复
--楼主还是找一条异常的数据,分析之
--查询1:
SELECT *
from szy_temp a
	INNER JOIN 
	(
		select gdsid,kqbh,gys,lastmodified=max(lastmodified) 
		from szy_temp 
		group by gdsid,kqbh,gys 
	) b 
on a.gdsid = b.gdsid and a.kqbh = b.kqbh and a.gys = b.gys and a.lastmodified < b.lastmodified 
 
--查询2:
select *   
from szy_temp a
	INNER JOIN 
	(
		select gdsid,kqbh,gys,lastmodified=max(lastmodified) 
		from szy_temp 
		group by gdsid,kqbh,gys 
	) b  
on a.gdsid = b.gdsid and a.kqbh = b.kqbh and a.gys = b.gys and a.lastmodified = b.lastmodified 

--查询3:再试试这个SQL,看看结果如何?
SELECT * FROM szy_temp a
WHERE NOT EXISTS
(
	SELECT 1
	FROM szy_temp b
	WHERE a.gdsid = b.gdsid and a.kqbh = b.kqbh and a.gys = b.gys and b.lastmodified > a.lastmodified
)
华夏小卒 2013-08-15
  • 打赏
  • 举报
回复
除了这4个字段,还有其他字段。 我本来觉得应该是一样的。但实际结果记录数不一样。纠结中。
LongRui888 2013-08-15
  • 打赏
  • 举报
回复
下面的查询1和2的结果是一样的:

--szy_temp里面有重复的数据

declare @szy_temp table(gdsid int,kqbh int,gys int,lastmodified datetime)
declare @szy_max table(gdsid int,kqbh int,gys int,lastmodified datetime)

insert into @szy_temp
values(1,1,1,'2013-01-01 00:00:01'),
      (1,1,1,'2013-01-01 00:00:05')


insert into @szy_max    
select gdsid,kqbh,gys,max(lastmodified) 
from @szy_temp 
group by gdsid,kqbh,gys 



--查询1:

delete @szy_temp
from @szy_temp a,@szy_max b 
where a.gdsid = b.gdsid and a.kqbh = b.kqbh and a.gys = b.gys and a.lastmodified < b.lastmodified 

select * from @szy_temp


--查询2:

select a.*   
from @szy_temp a,@szy_max b 
where a.gdsid = b.gdsid and a.kqbh = b.kqbh and a.gys = b.gys and a.lastmodified = b.lastmodified 
  
LongRui888 2013-08-15
  • 打赏
  • 举报
回复
粗看应该是一样的吧。 2个查询的结果集有什么不同吗?
华夏小卒 2013-08-15
  • 打赏
  • 举报
回复
引用 1 楼 wwwwgou 的回复:
哪个字段有NULL的情况吗?lastmodified。。。
4个关键字段都是not null的。 感觉应该是一样的。 但实际数据,查询2是查询1的2倍多几十条。
Shawn 2013-08-15
  • 打赏
  • 举报
回复
哪个字段有NULL的情况吗?lastmodified。。。
华夏小卒 2013-08-15
  • 打赏
  • 举报
回复
开发人员知道业务逻辑,都不测了,直接把查询2用到生产库上了。呵呵。 原来用的查询1. 估计还是我哪里数据搞错了。
zbdzjx 2013-08-15
  • 打赏
  • 举报
回复
感觉只有一种可能,就是在“insert into szy_max”这句之前没有删除szy_max里面的记录。
92讲视频课+16大项目实战+课件源码  为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。      从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。   本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。  二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。  四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。  五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧