Sql Server在相同的上下文中滞后?

时间:2017-06-12 15:29:16

标签: sql sql-server sql-server-2012 lag

我需要从表中获取前一个id,但是我想将前一个记录限制为id_sucursal(branch)的给定id,因为如果我不这样做,第一行(id_sucursal)将会得到来自另一个sucursal的previous_id(滞后)。 我知道我可以通过id_sucursal订购并且工作正常但是我想将它保存在相同的id_sucursal上下文中,这是select语句,非常简单且不需要更多。

Select

    -- current id
    t.id,

    -- when i order everything is ok but on the first row 
    -- I get the id from another sucursal
    lag(id) OVER (ORDER BY t.id_sucursal) prev_id,

    -- here sucursal may be different
    t.id_sucursal

    From sucursal_info

做一些像这样的事情会很棒:

Select

    t.id,

    lag(id) OVER (ORDER BY t.id_sucursal) (WHERE id_sucursal = t.id_sucursal) prev_id,

    --
    t.id_sucursal

    From sucursal_info

当然还有更多的行涉及,但我只是带来了需要解释的内容。

这是smms的另一个例子: enter image description here

1 个答案:

答案 0 :(得分:1)

您似乎需要在 partition by 中添加 LAG 条款。

....
lag(id) OVER (parition by id_sucursal ORDER BY id_sucursal) prev_id. 
.....

此外,我没有看到您为t设置表的别名,但您将列称为t.column_name。因此我删除了它