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

如何使用postgres中的窗口功能选择特定的更改

  •  3
  • xordon  · 技术社区  · 15 年前

    我有一个带有外键的表,我需要得到这些键何时更改的报告。

    from | to | timestamp
       1 |  2 | 0000
       1 |  2 | 0001
       1 |  2 | 0002
       1 |  3 | 0003
       1 |  3 | 0004
       1 |  2 | 0005
    

    选择from,to,FIRST(时间戳)from table GROUP BY from,to;

    from | to | timestamp
       1 |  2 | 0000
       1 |  3 | 0003
    

    我可以通过分组来获得前两个过渡,但是它将第三个过渡与第一个过渡分组,当它返回时我无法看到它。

    我想做一个查询,得到以下结果:

    from | to | timestamp
       1 |  2 | 0000
       1 |  3 | 0003
       1 |  2 | 0005
    

    1 回复  |  直到 15 年前
        1
  •  5
  •   Mark Byers    15 年前

    LAG 要访问上一行并进行比较,以查看它是否具有相同的“from”和“to”值:

    SELECT "from", "to", timestamp
    FROM
    (
        SELECT
            "from",
            "to",
            timestamp,
            LAG(("from", "to")) OVER (ORDER BY timestamp) AS prev
        FROM Table1
    ) T1
    WHERE ("from", "to") IS DISTINCT FROM prev
    

    结果:

    from  to    timestamp
    1     2     0000        
    1     3     0003        
    1     2     0005