我正在尝试为每个关联值(例如到期日)发生变化的账户选择随时间变化的账户表中的所有记录。值的更改将导致帐户的最新记录被终止并创建新记录(包含次日的新生效日期)。此表中帐户的最新记录的结束日期为 12/31/9000。
例如,在下图中,帐户 44444444 不会包含在我的查询结果集中,因为它的值没有变化(因此除了原始记录之外也没有其他记录);但是,其他帐户的值(和多条记录)有多个更改,因此我希望看到返回的那些。
此外,该表还有许多其他字段(列)未包含在下面,但这些字段的值的更改可以触发创建新记录;但是,我只想检索那些“值”列中的数字已更改的帐户的所有记录。有哪些方法可以获得我需要的结果?
注意:该表的主键包括 acct_id 和 eff_dt,我在 Greenplum 环境中使用 PostgreSQL。
以下是我尝试使用但产生有问题结果的两种类型的查询:
最佳答案
我想你想要窗口函数来比较值:
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/