实际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肯定是变化的,不可能一直使用 ...
随机推荐
- C# 读写txt文件方法
添加引用: using System.IO; 1.File类写入文本文件: private void btnTextWrite_Click(object sender, EventArgs e) { ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境
1.前言 2015年1月15日,发布ArcGIS Runtime SDK for Android v10.2.5版本.从该版本开始默认支持android studio开发环境,示例代码的默认开发环境也 ...
- 基于Vue的WebApp项目开发(三)
实现根组件通用的头部和底部样式 明白由webpack搭建起来的Vue项目的执行流程,那么就可以知道实现这个需要只要在根组件和入口文件上做“手脚”即可 <!--以后项目的根组件--> < ...
- IOC和AOP的个人理解
IOC,依赖倒置的意思,所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B. 所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B, ...
- 在AndroidStudio中数据存储第三方数据管理Bmob的使用
---恢复内容开始--- 在日常写代码的过程中我们比较痛苦的就是数据库的建立和使用,那么今天来介绍一下一个第三方的数据管理平台Bmonb. 一.我们首先进入Bmob的官网创建一个账号 Bome官网网址 ...
- 毕向东_Java基础视频教程第19天_IO流(20~22)
第19天-20-IO流(改变标准输入输出设备) static void setIn(InputStream in) Reassigns the "standard" input s ...
- python windows 远程执行bat
本机环境:Win 10,python3.6 远程机器: Win7.WinServer 因python在windows上执行需要用到 wmi 模块. wmi 模块下载地址:https://sourcef ...
- January 13 2017 Week 2 Friday
Those who turn back never reach the summit. 回头的人永远也到不了顶峰. I always turned back on my life road, so i ...
- HTML5 网页 漂浮窗广告 JavaScript逻辑 - demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 配置Ceph集群为OpenStack后端存储
配置Ceph存储为OpenStack的后端存储 1 前期配置 Ceph官网提供的配置Ceph块存储为OpenStack后端存储的文档说明链接地址:http://docs.ceph.com/docs/ ...