PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Fonctions de fenêtre et agrégation plus locale

Cela renvoie le résultat souhaité avec les exemples de données. Je ne sais pas si cela fonctionnera pour les données du monde réel :

select k, 
       min(v) over (partition by group_nr) as min_v,
       max(v) over (partition by group_nr) as max_v
from (
    select *,
           sum(group_flag) over (order by v,k) as group_nr
    from (
    select *,
           case
              when lag(k) over (order by v) = k then null
              else 1
            end as group_flag
    from window_test
    ) t1
) t2
order by min_v;

J'ai omis le DISTINCT cependant.