实际SQL案例解决方法整理_LEAD函数相关
表结构及数据如下:

需求:
将记录按照时间顺序排列,每三条记录为一组,若第二条记录与第一条记录相差5分钟,则删除该记录,若第三条与第二条记录相差5分钟,则删除该记录,
第二组同理,遍历全表,按要求删除记录。
例如:
9:55:00,10:00:00,10:05:00三条记录为一组,后两条记录均满足条件,均删除。(注意:虽然10:10:00的记录与10:05:00的记录也相差5分钟,但不是同一组,不能删除)
处理SQL如下:
WITH T AS
(SELECT TIME_,
DEL_TIME_2,
CASE
WHEN LABEL_ = 2 THEN
NULL
ELSE
DEL_TIME_3
END AS DEL_TIME_3
FROM (SELECT TIME_,
LABEL_,
CASE
WHEN (TO_DATE(TIME_2, 'HH24:MI:SS') -
TO_DATE(TIME_, 'HH24:MI:SS')) * 24 * 60 = 5 THEN
TIME_2
ELSE
NULL
END AS DEL_TIME_2,
CASE
WHEN (TO_DATE(TIME_3, 'HH24:MI:SS') -
TO_DATE(TIME_2, 'HH24:MI:SS')) * 24 * 60 = 5 THEN
TIME_3
ELSE
NULL
END AS DEL_TIME_3
FROM (SELECT TIME_, TIME_2, TIME_3, MOD(RN, 3) AS LABEL_
FROM (SELECT TIME_,
LEAD(TIME_, 1) OVER(ORDER BY 1) AS TIME_2,
LEAD(TIME_, 2) OVER(ORDER BY 1) AS TIME_3,
ROWNUM AS RN
FROM TEMP_A
ORDER BY TO_DATE(TIME_, 'hh24:mi:ss'))
WHERE TIME_ IS NOT NULL)
WHERE LABEL_ > 0))
SELECT DISTINCT DEL_TIME
FROM T UNPIVOT(DEL_TIME FOR DEL_FLAG IN(DEL_TIME_2, DEL_TIME_3));
步骤:
1、涉及到每条记录与其后的记录的比较,故使用LEAD() OVER()函数,将数据按时间顺序排序后,将本记录、其后的第一条记录、其后的第二条记录分别置于同一行,并编号;

2、若TIME_2和TIME_相差5分钟,TIME_3和TIME_2相差5分钟,则保留这两个时间点,置为DEL_TIME_2,DEL_TIME_3;
3、每三条记录为一组,利用编号RN字段对3取余,则每组的编号均为1、2、0,其中为编号为0的记录是每组的最后一条记录,其后的第一、第二条记录是下一组的记录,对本组的统计无意义,即使满足条件也不应删除,因此将编号为0的记录全部过滤;每组中编号为2的记录,其后的第二条记录是下一组的第一条记录,在本组中也不做考虑,置为NULL;

4、表中余下记录即为对应的时间点,满足条件的应删除的时间DEL_TIME_2、DEL_TIME_3;将该两列合并为一列,并去重,得出最终结果;

实际SQL案例解决方法整理_LEAD函数相关的更多相关文章
- Direct3D11学习:(零)常见问题及解决方法整理
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 在D3D11学习的这个系列中,单独写一篇文章来记录自己学习过程中遇到的问题及最后的解决方法. 这篇文章的目的 ...
- ORA-06502:at "WMSYS.WM_CONCAT_IMPL",line 30 解决方法整理
之前数据量少的时候,用:select wm_concat(字段) from 表 拼接数据量小的话,没有问题,数据量超出4000个就会爆以下错误信息: 解决方法(Oracle 函数xmlagg拼接): ...
- GeoEvent使用问题及解决方法整理
假如GeoEvent的部署环境是一个典型的WebGIS架构(Portal+GIS Server),往往会遇到一些问题,例如: 问题:发布的StreamService流服务无法查看. 原因:默认发布的S ...
- maven编译常见错误解决方法整理
程序包com.sun.xml.internal.ws.spi不存在 当maven项目里面有用到JDK内部的一些类,接口(如:com.sun.xml.internal.ws.spi.ProviderIm ...
- VS编译duilib项目时候的错误解决方法整理(转载)
转载自:http://blog.csdn.net/x356982611/article/details/30217473 @1:找不到Riched20.lib 用everything等软件搜索下磁盘, ...
- C# Winform应用程序占用内存较大解决方法整理(转)
原文:http://www.jb51.net/article/56682.htm 背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂 ...
- (转)C# Winform应用程序占用内存较大解决方法整理
背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰 ...
- C# Winform应用程序占用内存较大解决方法整理
微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其 ...
- 《DDNS服务器的搭建和案例解决方法》
DDNS原理:DNS + DHCP =DDNS DHCP负责ip解析,和分配给客户机ip,ip为随机数. DNS负责域名解析,A记录里记录了每个ip对应的域名. 客户端ip肯定是变化的,不可能一直使用 ...
随机推荐
- 安卓app开发-01-开发工具及环境配置
安卓app开发-01-开发工具及环境配置 请大家根据推荐指数和自己的意愿选择 使用 Android Studio 1.可以使用 Android Studio 下载地址:http://www.andro ...
- 理解ASP.NET 5运行时命令:DNVM, DNX, 和DNU
ASP.NET 5 引入了一个新型的运行时,让我们可以现场交付模式组合式构建应用程序,而不依赖于宿主机上的.NET框架.这种新模式为我们提供了命令行工具(DNVM.DNX.DNU)用于管理我们的.ne ...
- 理解 on-policy 和 off-policy
转自:https://www.cnblogs.com/xiachongkun/p/7767976.html,感谢分享 大名鼎鼎的蒙特卡洛方法(MC),源自于一个赌城的名字,作为一种计算方法,应用领域众 ...
- C语言中关键词static的用法与作用域
一.面向过程设计中的static 转载:http://blog.csdn.net/celerylxq/article/details/6160499 1.静态全局变量 在全局变量前,加上关键字stat ...
- 爬虫day02
s10day112 内容回顾: 第一部分:爬虫相关 1. 谈谈你对http协议的理解? 规范: 1. Http请求收发数据的格式 GET /index/ http1.1/r/nhost:xxx.com ...
- ffmpeg 简介及使用
简介 ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url ...
- weixin设置菜单
https://jingyan.baidu.com/article/925f8cb8dfcf11c0dce05661.html
- 前端静态资源版本更新与缓存之——通过gulp 在原html文件上自动化添加js、css版本号
原理 修改js和css文件 通过对js,css文件内容进行hash运算,生成一个文件的唯一hash字符串(如果文件修改则hash号会发生变化) 替换html中的js,css文件名,生成一个带版本号的文 ...
- 用适配器模式处理复杂的UITableView中cell的业务逻辑
用适配器模式处理复杂的UITableView中cell的业务逻辑 适配器是用来隔离数据源对cell布局影响而使用的,cell只接受适配器的数据,而不会与外部数据源进行交互. 源码: ModelCell ...
- 通过u盘启动盘重装系统
前言:一直想通过u盘启动盘给旧本装个win7,但是发现网上完整的教程很少.这里分享给大家我重装的一些步骤和遇到的问题. 前期准备: 1.我们要准备一个容量在4G以上的U盘. 2.我们要将U盘中的重要数 ...