示例:获取在48小时之内重复的记录

SELECT  *
FROM ( SELECT b.* ,
LAG(b.OperatorTime, 1, b.OperatorTime) OVER ( PARTITION BY b.No ORDER BY b.OperatorTime ) AS BeforTime ,
LEAD(b.OperatorTime, 1, b.OperatorTime) OVER ( PARTITION BY b.No ORDER BY b.OperatorTime ) AS NextTime
FROM Test b
) a
WHERE DATEDIFF(HH, a.BeforTime, a.OperatorTime) < 24
AND DATEDIFF(HH, a.OperatorTime, a.NextTime) < 24
AND a.No IN ( SELECT c.No
FROM dbo.Test c
GROUP BY c.No
HAVING COUNT(c.No) > 1 )

LAG函数:

作用:访问相同结果集中先前行的数据,而用不使用 SQL Server 2016 中的自联接。 LAG 以当前行之前的给定物理偏移量来提供对行的访问。 在 SELECT 语句中使用此分析函数可将当前行中的值与先前行中的值进行比较。

语法:

LAG (scalar_expression [,offset] [,default])
OVER ( [ partition_by_clause ] order_by_clause )

参数:

scalar_expression
要根据指定偏移量返回的值。 这是一个返回单个(标量)值的任何类型的表达式。 scalar_expression不能为分析的函数。

偏移量
当前行(从中获得取值)后的行数。 如果未指定,则默认值为 1。 偏移量可以是列、 子查询或计算结果为正整数其他表达式或可以隐式转换为bigint。 偏移量不能为负值或分析函数。

默认值
要返回时的值scalar_expression偏移量为 NULL。 如果未指定默认值,则返回 NULL。 默认可以是列、 子查询或其他表达式,但不是能为分析的函数。 默认必须是类型兼容与scalar_expression

通过( [ partition_by_clause ] order_by_clause)
partition_by_clause将划分为分区函数应用到的 FROM 子句生成的结果集。 如果未指定,则此函数将查询结果集的所有行视为单个组。 order_by_clause应用函数之前确定数据的顺序。 如果partition_by_clause指定,它确定分区中的数据的顺序。 Order_by_clause是必需的。

SELECT-OVER 子句:

作用:在应用关联的开窗函数前确定行集的分区和排序。 也就是说,OVER 子句定义查询结果集内的窗口或用户指定的行集。 然后,开窗函数将计算窗口中每一行的值。 您可以将 OVER 子句与函数一起使用,以便计算各种聚合值,例如移动平均值、累积聚合、运行总计或每组结果的前 N 个结果。

例子:

SELECT SalesOrderID, ProductID, OrderQty
,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS Total
,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS "Avg"
,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS "Count"
,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS "Min"
,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS "Max"
FROM Sales.SalesOrderDetail
WHERE SalesOrderID IN(43659,43664); SalesOrderID ProductID OrderQty Total Avg Count Min Max
------------ ----------- -------- ----------- ----------- ----------- ------ ------
43659 776 1 26 2 12 1 6
43659 777 3 26 2 12 1 6
43659 778 1 26 2 12 1 6
43659 771 1 26 2 12 1 6
43659 772 1 26 2 12 1 6
43659 773 2 26 2 12 1 6
43659 774 1 26 2 12 1 6
43659 714 3 26 2 12 1 6
43659 716 1 26 2 12 1 6
43659 709 6 26 2 12 1 6
43659 712 2 26 2 12 1 6
43659 711 4 26 2 12 1 6
43664 772 1 14 1 8 1 4
43664 775 4 14 1 8 1 4
43664 714 1 14 1 8 1 4
43664 716 1 14 1 8 1 4
43664 777 2 14 1 8 1 4
43664 771 3 14 1 8 1 4
43664 773 1 14 1 8 1 4
43664 778 1 14 1 8 1 4

LEAD:

访问相同结果集的后续行中的数据,而不使用 SQL Server 2012 中的自联接。 LEAD 以当前行之后的给定物理偏移量来提供对行的访问。 在 SELECT 语句中使用此分析函数可将当前行中的值与后续行中的值进行比较。

语法:LEAD ( scalar_expression [ ,offset ] , [ default ] )     OVER ( [ partition_by_clause ] order_by_clause )

scalar_expression,要返回的值基于指定的偏移量。 这是一个返回单个(标量)值的任何类型的表达式。scalar_expression 不能为分析函数

offset默认值为1, offset 可以是列、子查询或其他求值为正整数的表达式,或者可隐式转换为bigint。offset 不能是负数值或分析函数。

default默认值为NULL, offset 可以是列、子查询或其他求值为正整数的表达式,或者可隐式转换为bigint。offset不能是负数值或分析函数。

LEAD和LAG非常相似,只是LAG是往前求值

最新文章

  1. 1、开篇:公司管理经验谈 - CEO之公司管理经验谈
  2. SCI英文论文写作- Latex 进阶
  3. 【2016-10-26】【坚持学习】【Day13】【WCF】【EF + Data Services】
  4. YII2 缩略图生成 第三方包修改
  5. type=&quot;file&quot; 选择图片后预览
  6. oracle 几个不常用的关键字
  7. java excle导出合计字段值
  8. MultiLine Text光标停留在第一行
  9. czxt
  10. [设计模式] 10 外观模式 facade
  11. 小米2S 连接Ubuntu Android Studio
  12. 算法导论学习-prim算法
  13. CDH-5.4.3离线安装
  14. css基础之 id和选择器
  15. html之结构化标记
  16. hdoj 4325 Flowers 线段树+离散化
  17. laravel 5.4中手动创建分页
  18. Windows服务的安装卸载及错误查找
  19. django自定义simple_tag和filter
  20. concat_ws 使用在hive spark-sql上的区别

热门文章

  1. [CSS] Build Responsive CSS Layouts with Tachyons
  2. Linux开发环境搭建与使用系列教程
  3. 在nginx中使用lua直接訪问mysql和memcaced达到数据接口的统一
  4. html5-4 HTML5超链接、URL地址和表格
  5. PHP移动互联网开发笔记(5)——基础函数库
  6. 【codeforces 757C】Felicity is Coming!
  7. Android下载文件提示文件不存在。。。 java.io.FileNotFoundException
  8. dom对象常用的属性和方法有哪些?
  9. 热烈庆祝UE4完全免费Free---GitHub上源码的关联方法
  10. 我的Java开发学习之旅------&amp;gt;Java经典排序算法之归并排序