Tengo una tabla que contiene varias columnas y quiero verificar el valor de una columna, seleccionar las filas después de ese valor de columna hasta que aparezca un valor de columna separado. He intentado usar BETWEEN, pero si los valores de la columna son enteros, solo busca números entre los enteros.
Por ejemplo, si tengo una tabla como esta:
valor de tiempo de identificación t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t5 12:10 PM 250 t5 12:15 PM 15 t8 11:00 AM 15 t8 3:00 PM 2 t8 3:05 PM 100 t2 7:00 PM 15 t2 7:01 PM 16 t15 5:00 AM 35
Me gustaría obtener las filas entre valores de 15 y 16. Básicamente, si pudiera ordenar por id, entonces time, y reunir las filas después de que aparezca 15 hasta que haya un valor de 16 dentro de ese mismo id. Si no hay un valor 16, quisiera las siguientes 100 filas, por ejemplo, y luego buscar el siguiente valor de 15.
Me gustaría que la consulta devuelva esto:
valor de tiempo de identificación t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t2 7:00 PM 15 t2 7:01 PM 16 t5 12:15 PM 15 t8 11:00 AM 15 t8 3:00 PM 2 t8 3:05 PM 100
Eso puede ser confuso. He intentado:
SELECT * FROM table WHERE value BETWEEN '15' AND '16' ORDER BY id, time
como punto de partida, pero eso solo devuelve filas con valores de 15 o 16 porque son enteros.
Quiero ordenar la mesa para identonces time. Estas entradas se agregan automáticamente a través de otro sistema, así que estoy tratando de consultar en la tabla los rangos de valores específicos.
¿Algunas ideas?
Aclaración:
Si tuviera filas con 15, 1, 16, 7, 15, 2, 16el mismo id, me gustaría que los dos "islas": 15, 1, 16, 15, 2, 16.

Respuestas:
Una sugerencia que debería funcionar en la versión 2008.
Probado en rextester.com :
Más información:
fuente
fuente
COUNT(*) OVER (ORDER BY ..)permitido