0

我的帖子

个人中心

设置

  发新话题
我现在有一组DateTime数据。每一个小时录入一次。但是有几天的某些时间有缺失。请问如何通过SQL查找出缺失的具体时间点。谢谢各位了。

QQ截图20160809112453.png (1.84 KB)

2016-8-9 11:27

QQ截图20160809112453.png




本帖最后由 UltraSQL 于 2016-8-25 14:41 编辑
再建一个表,穷举出头尾时间之间的所有值,然后一个简单的NOT EXISTS判断就完事了。



SQL Server 2008 MCITP | SQL Server 2012 MCSE | SQL Server MVP | MySQL 5.6 OCP | Oracle 11g OCP
这个思想在该文档的第17页有讲到“空间换时间”:
http://www.mongoing.com/wp-conte ... J_MongoDB+Spark.pdf



SQL Server 2008 MCITP | SQL Server 2012 MCSE | SQL Server MVP | MySQL 5.6 OCP | Oracle 11g OCP
从你的截图来看,有重复数据,是每小录入2次。。



如果你的数据没有重复值,并且是每小时一次的话,下面的代码可以找出缺失值的。
start表示缺少开始的位置,end表示缺失值结束的位置,这个范围里所有值就是缺失的。dt表只有一个datetime字段dt。

select  DATEADD(HH,1,t1.dt) as start, DATEADD(HH,-1,min (t3.dt)) as [end] from tb t1
left join tb t2
on DATEADD(HH,1,t1.dt)=t2.dt
left join tb t3
on t1.dt<t3.dt
where t2.dt is null and t3.dt is not null
group by t1.dt,t2.dt



把所有的时间点构造成一个列表,然后和这个表去jion,就能比较出来了



我的51CTO博客

SQL Server MCITP, MVP, MCT, DBA
很典型的问题,推荐阅读



SQL Server 2008 MCITP | SQL Server 2012 MCSE | SQL Server MVP | MySQL 5.6 OCP | Oracle 11g OCP
同问,求解答,ZZZZ



提示: 作者被禁止或删除 内容自动屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
赞赞哒~



提示: 作者被禁止或删除 内容自动屏蔽
‹‹ 上一贴:jeecg用三天时间完成的小项目   |   下一贴:sqlserver 如何跳过错误继续执行sql ››
  发新话题
快速回复主题
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 友情链接 |意见反馈 | 网站地图
Copyright©2005-2017 51CTO.COM
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系:bbs@51cto.com