SQL SERVER LEAD和LAG使用

示例:獲取在48小時以內重複的記錄express

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 語句中使用此分析函數可將當前行中的值與先前行中的值進行比較。spa

語法:scala

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

參數:code

scalar_expression
要根據指定偏移量返回的值。 這是一個返回單個(標量)值的任何類型的表達式。 scalar_expression不能爲分析的函數。blog

偏移量
當前行(從中得到取值)後的行數。 若是未指定,則默認值爲 1。 偏移量能夠是列、 子查詢或計算結果爲正整數其餘表達式或能夠隱式轉換爲bigint。 偏移量不能爲負值或分析函數。排序

默認值
要返回時的值scalar_expression偏移量爲 NULL。 若是未指定默認值,則返回 NULL。 默認能夠是列、 子查詢或其餘表達式,但不是能爲分析的函數。 默認必須是類型兼容與scalar_expressioninput

經過( [ partition_by_clause ] order_by_clause)
partition_by_clause將劃分爲分區函數應用到的 FROM 子句生成的結果集。 若是未指定,則此函數將查詢結果集的全部行視爲單個組。 order_by_clause應用函數以前肯定數據的順序。 若是partition_by_clause指定,它肯定分區中的數據的順序。 Order_by_clause是必需的。it

 

SELECT-OVER 子句:io

做用:在應用關聯的開窗函數前肯定行集的分區和排序。 也就是說,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是往前求值

相關文章
相關標籤/搜索