如何在哪里使用LEAD和LAG?

Sal*_*med 6 sql-server lag lead

我有一个这样的表:

Number   Price    Type       Date         Time
------   -----    ----    ----------    ---------
23456    0,665     SV     2014/02/02     08:00:02
23457    1,3       EC     2014/02/02     07:50:45
23460    0,668     SV     2014/02/02     07:36:34
23461    0,668     SV     2014/02/02     07:37:34
23462    0,668     SV     2014/02/02     07:38:34
23463    0,668     SV     2014/02/02     07:39:34
Run Code Online (Sandbox Code Playgroud)

对于每条记录,我需要上一个/下一个价格.在这种情况下,查询很简单.

Select Lag(price) over (order by date desc, time desc),
Lead(price) over (order by date desc, time desc)
from ITEMS
Run Code Online (Sandbox Code Playgroud)

但我需要结果Where Next price <>记录价格

我的查询是

    Select Lag(price) over (order by date desc, time desc) Nxt_Price,
    Lead(price) over (order by date desc, time desc) Prv_Price
    from ITEMS
 Where Nxt_Price <> price
Run Code Online (Sandbox Code Playgroud)

但它拒绝使用该变量

Vee*_*era 8

请尝试以下查询:

SELECT Nxt_Price, Prv_Price 
FROM
    (Select price, Lag(price) over (order by date desc, time desc) Nxt_Price,
    Lead(price) over (order by date desc, time desc) Prv_Price
    from ITEMS) AS InnerQuery
 Where Nxt_Price <> price
Run Code Online (Sandbox Code Playgroud)

它可能会帮助你.

  • 它不是内部联接,它是子查询。Nxt_Price和Prv_Price列仅在innerQuery内部创建。在同一查询中无法访问它们。因此,我们需要使用另一个“选择”查询来使用Nxt_Price和Prv_Price的值。 (2认同)

Ben*_*hul 6

使用公用表表达式。

with myItems as (
    select
       Lag(price) over (order by date desc, time desc) Nxt_Price,
       Lead(price) over (order by date desc, time desc) Prv_Price
    from ITEMS
)
select *
from myItems
where Nxt_Price <> Prv_Price
Run Code Online (Sandbox Code Playgroud)