【问题标题】:How to use LEAD and LAG In Where?如何在哪里使用 LEAD 和 LAG?
【发布时间】:2014-11-11 12:27:48
【问题描述】:

我有一张这样的桌子:

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

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

Select Lag(price) over (order by date desc, time desc),
Lead(price) over (order by date desc, time desc)
from ITEMS

但我需要结果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

但它拒绝使用该变量

【问题讨论】:

    标签: sql-server lag lead


    【解决方案1】:

    试试下面的查询:

    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
    

    也许对你有帮助。

    【讨论】:

    • 你能解释一下为什么使用 'inner_Query' 有效吗?
    • 不是内连接,是子查询。 Nxt_Price 和 Prv_Price 列仅在 innerQuery 内部创建。不可能在同一个查询中访问它们。因此,我们需要使用另一个“选择”查询来使用 Nxt_Price 和 Prv_Price 的值。
    【解决方案2】:

    使用公用表表达式。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多