sql - 如何使用 postgres 中的窗口函数选择特定更改

标签 sql postgresql

我有一个包含一些外键的表,我需要获取这些键何时更改的报告。

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

SELECT from,to,FIRST(timestamp) 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

这可能吗?

最佳答案

在 PostgreSQL 8.4 中,您可以使用窗口函数 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    

关于sql - 如何使用 postgres 中的窗口函数选择特定更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764498/

相关文章:

sql - 如何制作按月分组的年度报告?

sql - alter table 为其他表创建列

postgresql - 尽管之前有 "SET client_min_messages TO WARNING"信息输出

postgresql - 在postgresql中将日期转换为unix时间戳

postgresql - 如何在字段行之间返回具有不同值的 ID

MySQL:ORDER BY 使用长字符串产生错误的顺序

SQL Server 表默认排序

postgresql - 使用 Vapor 3 检查应用程序是否有最新数据

mysql - 将日期设置为三天前

c# - 在 SQLite.Net-PCL 中创建和使用具有复合主键的表