首页 > 解决方案 > SQL如何为这个问题创建一个聚合?

问题描述

我有这张表,里面有 cod、插入日期 (dat_valid_ini) 和标志。仅当标志发生更改并且聚合仅显示最低的 dat_valid_ini 时,我才需要聚合。

我有的桌子:

鳕鱼 DAT_VALID_INI FLG
1088184 1900/01/01
1088184 2019/11/03
1088184 2020/02/12
1088184 2020/03/29
1088184 2020/03/31
1088184 2020/06/21

结果我需要的表:

鳕鱼 DAT_VALID_INI FLG
1088184 1900/01/01
1088184 2019/11/03
1088184 2020/06/21

标签: sqlsql-servertsqlaggregate

解决方案


您似乎希望在更改后第一次出现标志。只需使用lag()和过滤:

select t.*
from (select t.*,
             lag(flg) over (partition by cod order by dat_valid_ini) as prev_flg
      from t
     ) t
where prev_flg is null or prev_flg <> flg;

推荐阅读