Tengo los siguientes datos en postgres:
index | item | ------+-------- 10 | aaa | 20 | aaa | 30 | bbb | 40 | aaa | 50 | aaa |Me gustaría agruparlo y obtener el valor mínimo y máximo. Sin embargo, solo debe agruparse hasta que la siguiente fila sea un elemento diferente.
Expectativa:
indexMin | indexMax | item | ---------+----------+---------- 10 | 20 | aaa | 30 | 30 | bbb | 40 | 50 | aaa |Puede orientar sobre esto?
Este es un problema de lagunas e islas, en el que desea agrupar filas "adyacentes". Aquí, el enfoque más simple es usar la diferencia entre los números de fila para identificar los grupos:
select min(idx) min_idx, max(idx) max_idx, item from ( select t.*, row_number() over(order by idx) rn1, row_number() over(partition by item order by idx) rn2 from mytable t ) t group by item, rn1 - rn2 order by min(idx)