我试图在每个帐户的时间变量帐户表中选择所有记录,并更改相关值(例如到期日期)。值的更改将导致最新帐户的最新记录以及创建的新记录(包含第二天的新生效日期)。此表中帐户的最新记录的结束日期为12/31/9000。
例如,在下图中,帐户44444444不会包含在我的查询结果集中,因为它没有更改值(因此除了原始文件之外没有其他记录);但是,其他帐户的值(和多个记录)有多处更改,所以我希望看到返回的那些。
我已经尝试使用row_num函数,以及自反连接,但由于某种原因我没有得到预期的结果。有什么方法可以获得我需要的结果?
注意:此表的主键包括acct_id和eff_dt。另外,我在Greenplum环境中使用PostgreSQL。
以下是我尝试使用的两种类型的查询但产生了有问题的结果:
如果您只想要帐户,请使用聚合:
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;