Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Contar ocurrencias dispersion

Estas en el tema de Contar ocurrencias dispersion en el foro de SQL Server en Foros del Web. Hola como andan. Vuelvo después de mucho tiempo con una consulta que tengo resuelta pero asumo que existe alguna forma más purista de hacerlo. Resulta ...
  #1 (permalink)  
Antiguo 01/10/2018, 09:34
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 6 meses
Puntos: 2
Contar ocurrencias dispersion

Hola como andan.
Vuelvo después de mucho tiempo con una consulta que tengo resuelta pero asumo que existe alguna forma más purista de hacerlo.
Resulta que tengo una tabla que registra valores por fecha y necesito saber cuantas veces se produce una planicie de mas menos 0,5 en al menos ocho registros consecutivos.

Código:
Fecha                 Valor
01/10/2018 00:00       0.15
01/10/2018 00:15       0.23
01/10/2018 00:30       0.17
01/10/2018 00:45       0.11
01/10/2018 01:00       0.04
01/10/2018 01:15       0.49
01/10/2018 01:30       2.16
...
31/10/2018 23:15       0.12
31/10/2018 23:30       0.76
31/10/2018 23:45       0.14
El registro que se obtiene muestra la cantidad de veces que ocurre la condición para el transcurso de un mes.
Actualmente utilizo un script con manejo de cursor donde cuento las ocurrencias comparando valores por cada iteración, pero supongo que se debe poder mejorar de alguna forma.
No me sirve el promedio ni la desviación estandar porque devuelve un valor que abarca todo el período.
Tampoco el having count porque debe que contar ocurrencia de valores consecutivos.

A ver si logran darme una mano.
Saludos
  #2 (permalink)  
Antiguo 01/10/2018, 13:36
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Contar ocurrencias dispersion

que es una planicie?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 01/10/2018, 14:02
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 6 meses
Puntos: 2
Respuesta: Contar ocurrencias dispersion

Cita:
que es una planicie?
Un término que no debería haber utilizado.

Lo que intento decir es que necesito contar cuantas veces se presenta una ocurrencia en un grupo de valores consecutivos.

En términos concretos: incrementar el contador en uno cuando se encuentren ocho valores consecutivos cuyo promedio no posea una dispersión mayor a 0.5.

Es un reporte mensual que lee una tabla de marcaciones que tiene 4 registros por hora, por eso lo ejemplifique de esa manera.
Fijate que la tabla comienza en el día 01/10 00:00 y termina el 31/10 23:45.
Los puntos suspensivos simbolizan todo lo que esta en el medio.

Supongamos que se encuentra un grupo de ocho valores consecutivos bajo esa condición entonces el contador incrementa uno y vuelve a buscar una próxima ocurrencia desde el siguiente valor hacia adelante bajo la misma condición, si la encuentra incrementa a dos y sigue así hasta el final.

En caso que todavía no se comprenda lo que intento explicar mando un ejemplo más detallado.
  #4 (permalink)  
Antiguo 02/10/2018, 08:58
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años, 6 meses
Puntos: 2
Respuesta: Contar ocurrencias dispersion

Voy a explicarme mejor porque no fui claro.
La tabla completa contiene los registros de todo un mes, la siguiente es una pequeña porción de la tabla real, que alcanza para lo que necesito ejemplificar:

Código:
Fecha                 Valor
01/10/2018 00:00       0.15
01/10/2018 00:15       0.23
01/10/2018 00:30       0.17
01/10/2018 00:45       0.11
01/10/2018 01:00       0.04
01/10/2018 01:15       0.49
01/10/2018 01:30       2.16
01/10/2018 01:45       0.14
01/10/2018 02:00       6.04
01/10/2018 02:15       0.33
01/10/2018 02:30       6.46
01/10/2018 02:45       0.11
01/10/2018 03:00       0.14
01/10/2018 03:15       0.19
01/10/2018 03:30       1.16
01/10/2018 03:45       0.11
01/10/2018 04:00       0.24
01/10/2018 04:15       0.12
01/10/2018 04:30       2.16
01/10/2018 04:45       0.11
01/10/2018 05:00       0.04
01/10/2018 05:15       0.49
01/10/2018 05:30       8.16
01/10/2018 05:45       4.51
01/10/2018 06:00       0.04
01/10/2018 06:15       0.49
01/10/2018 06:30       2.56
01/10/2018 06:45       0.11
01/10/2018 07:00       0.04
01/10/2018 07:15       0.39
01/10/2018 07:30       1.16
01/10/2018 07:45       1.11
01/10/2018 08:00       0.04
01/10/2018 08:15       1.49
01/10/2018 08:30       2.13
01/10/2018 08:45       0.16
01/10/2018 09:00       0.04
01/10/2018 09:15       0.49
01/10/2018 09:30       2.26
01/10/2018 09:45       0.11
01/10/2018 10:00       0.64
01/10/2018 10:15       0.49
01/10/2018 10:30       1.16
01/10/2018 10:45       0.31
01/10/2018 11:00       0.04
01/10/2018 11:15       0.39
01/10/2018 11:30       3.15
01/10/2018 11:45       0.11
01/10/2018 12:00       0.14
01/10/2018 12:15       0.19
01/10/2018 12:30       2.16
01/10/2018 12:45       0.11
01/10/2018 13:00       0.14
01/10/2018 13:15       0.42
01/10/2018 13:30       2.06
01/10/2018 13:45       0.16
01/10/2018 14:00       0.74
01/10/2018 14:15       0.69
01/10/2018 14:30       3,16
01/10/2018 14:45       0.81
01/10/2018 15:00       4.04
01/10/2018 15:15       0.29
01/10/2018 15:30       2.73
El dato que necesito mostrar es el contador de desvíos que ocurren en un mes, el mismo aumenta en 1 cuando el valor STDEVP esté por encima de 0.1, evaluando cada seis registros.
No se debe fragmentar de 6 en 6.
Se debe calcular el promedio y la dispersión estandar del valor 1 al 6, moverme una posición hacia adelante (2 al 7), volver a calcular, luego una más (3 al 8) y así hasta el valor del día 31/10/2018 23:45.
Según los valores de la tabla los primeros tres cálculos serían:

Código:
AVG(0.15, 0.23, 0.17, 0.11, 0.04, 0.49), STDEVP (0.15, 0.23, 0.17, 0.11, 0.04, 0.49)
En caso que el desvío estandar (STDEVP) sea mayor que 0.1 aumento en 1 el contador.
Me muevo a la siguiente posición, eso significa que elimino el valor 0.15 y el primer valor pasa a ser 0.23

Código:
AVG(0.23, 0.17, 0.11, 0.04, 0.49, 2.16), STDEVP (0.23, 0.17, 0.11, 0.04, 0.49, 2.16)
Evalúo la condición bajo la misma lógica para aumentar el contador y sigo

Código:
AVG(0.17, 0.11, 0.04, 0.49, 2.16, 0.14), STDEVP (0.17, 0.11, 0.04, 0.49, 2.16, 0.14)
Espero que se entienda
  #5 (permalink)  
Antiguo 02/10/2018, 09:26
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Contar ocurrencias dispersion

Si habia entendido tu problematica, para ese tipo de situaciones no hay una "funcion" en sql server, hay varias para hacer conteos(rowcount con partition) pero tu caso es mas especifico, no son datos que se repiten sino que son datos que dependiendo condiciones vas a obtener cierto resultado, aqui podria ser analizar el proceso que tienes actualmente y optimizarlo(lecturas a tablas, joins, cursores etc)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:33.