Agrupe filas por intervalos de fechas contiguos para grupos de valores
Considera alguna mesaT
, 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
Quiero agrupar los datos para que los cambios sean auditados fácilmente / reducir la repetición, así que tengo
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
Puedo hacerlo fácilmente si puedo obtener otra columna con las filas numeradas como1 2 3 3
(solo es importante que los números sean distintos), y luegoGROUP BY
esa columna
Mi intento en la consulta:
SELECT *, DENSE_RANK() OVER (ORDER BY rate) island
FROM T
ORDER BY Date2
no da lo que estoy buscando:
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
Quiero que la consulta reconozca el segundo grupo de-90
los valores deben tratarse como un nuevo grupo, ya que aparecieron después de un grupo con un grupo diferenterate
.
La etiqueta SQL [gaps-and-islands] fue bastante útil, pero no puedo entender cómo manejar cuando la tasa vuelve a un valor anterior. ¿Cómo debo modificar mi consulta?