Agrupar linhas por períodos contíguos para grupos de valores
Considere alguma tabelaT
, Ordenado porCol1, Col2, Date1, Date2
:
Col1 Col2 Date1 Date2 rate
ABC 123 11/4/2014 11/5/2014 -90
ABC 123 11/4/2014 11/6/2014 -55
ABC 123 11/4/2014 11/7/2014 -90
ABC 123 11/4/2014 11/10/2014 -90
Quero agrupar os dados para que as alterações sejam auditadas com facilidade / reduzam a repetição, por isso
Col1 Col2 Date1 start_Date2 end_Date2 rate
ABC 123 11/4/2014 11/5/2014 11/5/2014 -90
ABC 123 11/4/2014 11/6/2014 11/6/2014 -55
ABC 123 11/4/2014 11/7/2014 11/10/2014 -90
Eu posso fazer isso facilmente se conseguir outra coluna com as linhas numeradas como1 2 3 3
(importante apenas que os números sejam distintos) e depoisGROUP BY
essa coluna.
Minha tentativa na consulta:
SELECT *, DENSE_RANK() OVER (ORDER BY rate) island
FROM T
ORDER BY Date2
não dá o que estou procurando:
Col1 Col2 Date1 Date2 rate island
ABC 123 11/4/2014 11/5/2014 -90 1
ABC 123 11/4/2014 11/6/2014 -55 2
ABC 123 11/4/2014 11/7/2014 -90 1
ABC 123 11/4/2014 11/10/2014 -90 1
Quero que a consulta reconheça o segundo grupo de-90
Os valores devem ser tratados como um novo grupo, pois apareceram após um grupo com um grupo diferente.rate
.
A tag SQL [gaps-and-islands] foi bastante útil, mas não sou capaz de descobrir como lidar quando a taxa volta ao valor anterior. Como devo modificar minha consulta?