sql - 返回特定关联值发生变化的账户的所有历史记录

标签 sql postgresql

我正在尝试为每个关联值(例如到期日)发生变化的账户选择随时间变化的账户表中的所有记录。值的更改将导致帐户的最新记录被终止并创建新记录(包含次日的新生效日期)。此表中帐户的最新记录的结束日期为 12/31/9000。

例如,在下图中,帐户 44444444 不会包含在我的查询结果集中,因为它的值没有变化(因此除了原始记录之外也没有其他记录);但是,其他帐户的值(和多条记录)有多个更改,因此我希望看到返回的那些。

此外,该表还有许多其他字段(列)未包含在下面,但这些字段的值的更改可以触发创建新记录;但是,我只想检索那些“值”列中的数字已更改的帐户的所有记录。有哪些方法可以获得我需要的结果?

Capture

注意:该表的主键包括 acct_id 和 eff_dt,我在 Greenplum 环境中使用 PostgreSQL。


以下是我尝试使用但产生有问题结果的两种类型的查询:

Query 1 Query 2

最佳答案

我想你想要窗口函数来比较值:

select t.*
from (select t.*,
             min(t.value) over (partition by t.acct_id) as min_value,
             max(t.value) over (partition by t.acct_id) as max_value
      from t
     ) t
where min_value <> max_value;

关于sql - 返回特定关联值发生变化的账户的所有历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49201957/

相关文章:

python - 如何使用 django ORM 在外键字段上连接两个表?

sql - 合并同一表的不同行 - Postgres

mysql - 在 MySQL 中,如何动态选择一个表的值作为另一个表中的列?

mysql - SQL Join 来自另一个表的数据计数

mysql - 选择不同的数据库进行连接 - mysql

postgresql - 将错误消息设置为英语不起作用

postgresql - 两列 : Integer and Boolean 上的 Postgres 唯一约束

sql - PostgreSQL 存储需要引用资料

php - 我如何使用 LEFT JOIN mysql 从另一个表派生 count(*)

Mysql建表语法错误