返回相应值变化的帐户的所有历史帐户记录

时间:2018-03-07 20:25:03

标签: sql postgresql

我正在尝试为每个帐户选择时间变量帐户表中的所有记录,并更改相关值(例如到期日期)。值的更改将导致最新帐户的最新记录以及创建的新记录(包含第二天的新生效日期)。此表中帐户的最新记录的结束日期为12/31/9000。

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

Illustration

我尝试过使用row_num函数,以及自反连接,但由于某种原因,我没有得到预期的结果。有什么方法可以获得我需要的结果?

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

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

Query 1
Query 2

1 个答案:

答案 0 :(得分:0)

如果您只想要帐户,请使用聚合:

select acct_id
from t
group by acct_id
having min(value) <> max(value);

根据您的说明,您还可以使用count(*) >

如果您想要原始记录,可以使用窗口功能:

select t.*
from (select t.*, count(*) over (partition by acct_id) as cnt
      from t
     ) t
where cnt > 1;