表结构及数据如下:

需求:

将记录按照时间顺序排列,每三条记录为一组,若第二条记录与第一条记录相差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函数相关的更多相关文章

  1. Direct3D11学习:(零)常见问题及解决方法整理

    转载请注明出处:http://www.cnblogs.com/Ray1024   一.概述 在D3D11学习的这个系列中,单独写一篇文章来记录自己学习过程中遇到的问题及最后的解决方法. 这篇文章的目的 ...

  2. ORA-06502:at "WMSYS.WM_CONCAT_IMPL",line 30 解决方法整理

    之前数据量少的时候,用:select wm_concat(字段) from 表 拼接数据量小的话,没有问题,数据量超出4000个就会爆以下错误信息: 解决方法(Oracle 函数xmlagg拼接): ...

  3. GeoEvent使用问题及解决方法整理

    假如GeoEvent的部署环境是一个典型的WebGIS架构(Portal+GIS Server),往往会遇到一些问题,例如: 问题:发布的StreamService流服务无法查看. 原因:默认发布的S ...

  4. maven编译常见错误解决方法整理

    程序包com.sun.xml.internal.ws.spi不存在 当maven项目里面有用到JDK内部的一些类,接口(如:com.sun.xml.internal.ws.spi.ProviderIm ...

  5. VS编译duilib项目时候的错误解决方法整理(转载)

    转载自:http://blog.csdn.net/x356982611/article/details/30217473 @1:找不到Riched20.lib 用everything等软件搜索下磁盘, ...

  6. C# Winform应用程序占用内存较大解决方法整理(转)

    原文:http://www.jb51.net/article/56682.htm 背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂 ...

  7. (转)C# Winform应用程序占用内存较大解决方法整理

    背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰 ...

  8. C# Winform应用程序占用内存较大解决方法整理

     微软的 .NET FRAMEWORK 现在可谓如火如荼了.但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其 ...

  9. 《DDNS服务器的搭建和案例解决方法》

    DDNS原理:DNS + DHCP =DDNS DHCP负责ip解析,和分配给客户机ip,ip为随机数. DNS负责域名解析,A记录里记录了每个ip对应的域名. 客户端ip肯定是变化的,不可能一直使用 ...

随机推荐

  1. 【MFC】转:在CHtmlView中判断页面加载完成

    在列出别人的代码前,记录下自己的,覆盖父类的OnNavigateComplete2函数即可. typedef struct _tagEventURL { CString strUrl; HANDLE ...

  2. java中静态代码块的用法和static用法(转)

    (一)java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程 ...

  3. Leetcode算法比赛----Longest Absolute File Path

    问题描述 Suppose we abstract our file system by a string in the following manner: The string "dir\n ...

  4. Android中使用异步线程更新UI视图的几种方法

    在Android中子线程是不能更新ui的. 所以我们要通过其他方式来动态改变ui视图, 1.runOnUiThreadactivity提供的一个轻量级更新ui的方法,在Fragment需要使用的时候要 ...

  5. react常用命令

    npm install -g create-react-appcreate-react-app my-appcd my-app/ 启动项目:npm start 安装依赖:npm install 编译: ...

  6. String对象内存分析

    Java中内存分析: 栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中). 堆(heap): ...

  7. 使用TFHpple解析html

    使用TFHpple解析html https://github.com/topfunky/hpple 前期准备工作 引入静态库文件 添加库文件的 header search paths(注意,必须选中 ...

  8. VC 6.0 MFC关闭对话框在win7出现崩溃的情况

    Ctrl + W 掉出来class管理 添加OnDestory方法 void CPackUpItemToSetDlg::OnDestroy() { exit(1); CDialog::OnDestro ...

  9. Linux基础和常用命令

    经常使用的命令: #查看端口被占用情况 netstat -tunlp|grep #查看java进程 ps -ef|grep java #压缩前端工程 rar a -ep1 ./update/win32 ...

  10. Java学习---Collection的学习

    Collection基本方法的使用 package com.huawei.ftl; import java.io.File; import java.io.FileInputStream; impor ...