代码之家  ›  专栏  ›  技术社区  ›  Metadata

如何通过检查当前行是否大于超前和滞后来获取当前行

  •  1
  • Metadata  · 技术社区  · 4 年前

    我有一张桌子 company 有两列。

    身份证件 价值
    1. 1.
    2. 2.
    3. 2.
    4. 2.
    5. 1.
    6. 2.
    7. 1.

    我必须从表中选择比其领先优势更大的记录;缓慢移动 我试图在下表中实现超前和滞后功能。

    select ID, 
    lead(ID, 1) over (order by ID) as nextVal, 
    lag(ID, 1) over (order by ID) as preVal 
    from company;
    

    我不明白的是,我该如何将当前行与 lead & lag 然后,如果当前行大于当前行,则仅选择该行 领导 & 缓慢移动

    我在找这张唱片:

    身份证件
    6.

    无法考虑第一行和最后一行,因为第一条记录没有上一行,最后一条记录没有下一行。有人能告诉我如何才能做到这一点吗?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Zakaria    4 年前

    试试这个:

    with u as
    (select ID, VALUE, 
    lead(VALUE) over (order by ID) as nextVal, 
    lag(VALUE) over (order by ID) as preVal 
    from company)
    select ID from u
    where VALUE > nextVal and VALUE > preVal;
    

    Fiddle

    它是 lead(VALUE) lead(ID) ,同样适用于 lag .