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 id
entonces 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, 16
el 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