Sunday, October 16, 2016

Db2 Moving Average

Esta es una pregunta Evergreen Joe Celko. Ignoro qué plataforma DBMS se utiliza. Pero en cualquier caso, Joe fue capaz de responder Hace más de 10 años con SQL estándar. Joe Celko SQL Puzzles y Respuestas cita: El último intento de actualización sugiere que podríamos utilizar el predicado para construir una consulta que nos daría un promedio móvil: ¿Es la columna extra o el enfoque de consulta mejor la consulta es técnicamente mejor debido a que el enfoque de actualización desnormalizar la base de datos. Sin embargo, si los datos históricos que se registran no va a cambiar y el cálculo de la media móvil es caro, es posible considerar el uso del enfoque de la columna. SQL Puzzle consulta: por todos los medios uniforme. Que acaba de lanzar al cubo de peso adecuado en función de la distancia desde el punto de tiempo actual. Por ejemplo quottake Gramaje1 de puntos de datos dentro de 24 horas a partir de la corriente weight0.5 punto de datos de puntos de datos dentro de 48hrsquot. Ese caso es importante la cantidad de puntos de datos consecutivos (como 6:12 am y las 23:48) están distantes entre sí un caso de uso que se me ocurre sería un intento de suavizar el histograma donde quiera puntos de datos no son lo suficientemente densa Msciwoj ndash 27 de de mayo de 15 a las 22:22 no estoy seguro de que el resultado esperado (salida) muestra la media móvil simple clásica (balanceo) durante 3 días. Porque, por ejemplo, el primer triple de números, por definición, da: pero se esperan 4.360 y su confuso. Sin embargo, sugiero la siguiente solución, que utiliza AVG función de ventana. Este enfoque es mucho más eficiente (clara y menos intensivas en recursos) que autocombinación introdujo en otras respuestas (y estoy sorprendido de que nadie ha dado una mejor solución). Usted ve que AVG se envuelve con el caso cuando p. days rownum gt a continuación para forzar s NULL en las primeras filas, siendo 3 la media móvil no tiene sentido. respondió 23 de febrero a las 13:12 Podemos aplicar Joe Celkos sucia externa izquierda método (como se cita anteriormente por Diego Scaravaggi) para responder a la pregunta, ya que se le pidió. Genera el resultado deseado: contestado 9 de enero a las doce y treinta y tres Tu respuesta 2016 Pila de Exchange, IncMoving media - MA descomponer Media Móvil - MA A modo de ejemplo SMA, considere un título con los siguientes precios de cierre de más de 15 días: Semana 1 (5 días ) 20, 22, 24, 25, 23 Semana 2 (5 días) 26, 28, 26, 29, 27 Semana 3 (5 días) 28, 30, 27, 29, 28 A MA de 10 días habría promediar el cierre precios de los primeros 10 días como el primer punto de datos. El siguiente punto de datos bajaría el precio más temprana, añadir el precio en el día 11 y tomar la media, y así sucesivamente, como se muestra a continuación. Como se señaló anteriormente, las AM lag acción del precio actual, ya que se basan en los precios del pasado largo es el período de tiempo para el MA, mayor es el retraso. Así, un MA de 200 días tendrá un grado mucho mayor de desfase de un MA de 20 días, ya que contiene precios de los últimos 200 días. La longitud de la MA a utilizar depende de los objetivos comerciales, entre las Asociaciones más cortos utilizados para el comercio a corto plazo ya largo plazo de las áreas metropolitanas más adecuado para inversores a largo plazo. El MA de 200 días es ampliamente seguido por los inversores y comerciantes, con pausas encima y por debajo de este promedio móvil considerado como señales de operación importantes. MAS también impartir señales comerciales importantes por sí mismos, o cuando dos medias cruzar. Un MA ascendente indica que la seguridad está en una tendencia alcista. mientras que una disminución MA indica que se trata de una tendencia a la baja. Del mismo modo, el impulso al alza se confirma con un cruce alcista. que ocurre cuando una MA corto plazo cruza por encima de la MA a más largo plazo. tendencia a la baja se confirma con un cruce bajista, que se produce cuando un MA corto plazo cruza por debajo de un plazo más largo MA. DB2 El trabajo La tendencia de la demanda de los anuncios de trabajo de DB2 citando como proporción de todos los puestos de trabajo de TI con un partido en el amplificador de base de datos de negocios categoría de inteligencia. DB2 Salario Tendencia Esta tabla proporciona el promedio móvil de 3 meses para los salarios cotizados en TI puestos de trabajo permanentes que citan DB2 dentro del Reino Unido. DB2 Salario Histograma Esta tabla proporciona un histograma de sueldos para puestos de trabajo de TI citan DB2 durante los 3 meses al 7 de octubre el año 2016 en el Reino Unido. DB2 30 mejores lugares de trabajo En la tabla siguiente se ve en la demanda y proporciona una guía de los salarios medios citados en puestos de trabajo de TI citan DB2 en el Reino Unido durante los 3 meses al 7 de octubre de 2016. La columna Posición Cambio proporciona una indicación de la variación de la demanda dentro de cada ubicación basada en el mismo periodo de 3 meses del año pasado. Localización (Instrucciones ver estadísticas y tendencias detalladas) Posición Cambio en el mismo período del año pasado comparándola Permanente Trabajo Anuncios salario medio Última 3 MonthsExploring el rico mundo de funciones SQL OLAP - Promedios de George Baklarz Explorando el rico mundo de funciones SQL OLAP en movimiento - Medias Móviles (nota editorial del comité de contenido: la mayor parte de lo que es en el artículo es multiplataforma, con excepción de los ejemplos de GAL / LEAD y firstValue / LASTVALUE no están disponibles en DB2 para z / OS) pobre del desarrollador o usuario final que tiene nunca había tenido la oportunidad de utilizar SQL real. Ya sabes, el tipo de SQL que hace algo más que seleccionar algunas filas con, posiblemente, unos predicados tirado Bueno, algunos pueden decir que podría ser una buena cosa no tener que conocer los detalles detrás de SQL Sin embargo, saber algo de la agrupación sofisticada , ordenar y clasificar las opciones de SQL podría hacer su vida más fácil, y tal vez incluso dar lugar a resultados más rápidos. El lenguaje SQL sintaxis SQL La expansión es rico en funcionalidad y, a menudo puede ser compleja para navegar. ¿Cómo hemos llegado a este punto en el lenguaje de nuestro simple INSERT, UPDATE, DELETE y SELECT inicios sistemas de bases de datos relacionales Los primeros carecían de capacidades analíticas - por ejemplo, la capacidad para calcular la desviación estándar, o generar medias móviles. Este tipo de cálculo se realiza típicamente en ya sea una hoja de cálculo, o una aplicación. Hay un gran número de productos en el mercado que generan sus propios cubos e informes mediante la extracción de datos de una base de datos (y, a menudo el uso de algunas técnicas de extracción muy pobres). Ejecución de informes localmente en una estación de trabajo como resultado dos cuellos de botella principales: la transferencia de grandes cantidades de datos a una estación de trabajo a través de una red limitada de cálculo intensivo cálculos que se ejecutan en procesadores lentos con poca memoria y el disco Aparte de añadir más riqueza al lenguaje SQL, la capacidad para generar los cubos y el resumen de la información a nivel de base de datos ayudaron a mejorar el rendimiento en un número de maneras: el servidor más grande que la base de datos estaba era más eficiente en el cálculo de los cubos, resúmenes, y otros cálculos que la estación de trabajo se enfrentan al reto de hacer el dato fue local para el procesador por lo que se requiere ninguna transferencia innecesaria de datos cuando se calcula el resultado Sólo los registros computados finales se devuelven a la aplicación Por supuesto, algunos administradores de bases entre nosotros también señalar que esta nueva capacidad se incrementó la cantidad de dolores de cabeza que tienen que frente a causa de demasiado entusiastas fanáticos de SQL que no teníamos ni idea de índices y optimización a veces nos olvidamos de que el motor de base de datos DB2 puede hacer mucho trabajo en nuestro nombre en lugar de confiar en nuestra hoja de cálculo favorita para calcular algunos de estos valores. Usted puede encontrar que el uso de estas funciones puede acelerar su notificación. O bien, puede impresionar a sus amigos cercanos con su capacidad de escribir SQL complejas On-Line Analytical Processing (OLAP) las funciones OLAP proporcionan una variedad de capacidades, incluyendo la capacidad de volver ordenación y numeración de fila, y modificar las funciones de columna para analizar un rango de valores dentro de una columna en lugar de todo el conjunto de resultados. Típicamente, una función OLAP se puede incluir en expresiones, en una lista de selección o la cláusula ORDER BY de una sentencia de selección. Si bien hay un montón de funciones OLAP que se encuentran dentro de DB2, vamos a mirar a medias móviles y cómo puede hacer uso de ellos. Antes de entrar en los detalles de las funciones OLAP, tenemos que crear una tabla y algunos datos de la muestra. En el siguiente ejemplo se supone que tiene una conexión con la base de datos de ejemplo que por lo general se genera para que en una instalación de DB2 para Linux, Unix y Windows. Nota: Los ejemplos de SQL que se encuentran en este artículo están disponibles como un archivo de texto descargable para su uso. No hay nada peor que tener que escribir en un conjunto de SQL y hacer que falle debido a una coma que falta o mal escrito el nombre de columna. Un enlace al archivo se proporciona al final del artículo. Lo primero que necesitamos para crear la tabla STOCKS, que contiene el símbolo de existencias (símbolo), la fecha de negociación (TRADINGDATE), y el precio de cierre de las acciones al final del día (ClosePrice). caen las reservas de mesa crean las existencias de mesa (La siguiente SQL utiliza la recursividad para generar datos para la tabla STOCKS con una sola acción (IDUG). El precio de la acción es 100 al comienzo del año y luego aumentó en un valor de 1 para todos los días hasta 10 de enero. los números se han mantenido de manera sencilla se puede ver cómo los cálculos se hacen en los ejemplos. insertar en poblaciones con Temp 1 (nm, TX, s1) como valores (IDUG, fecha (2015-01-01), 100 ) seleccionar IDUG, tx 1 día, s11 donde tx fecha lt (01/10/2015) seleccionar de Temp 1 Si desea generar números aleatorios para sus acciones, se puede modificar la instrucción SELECT para incluir la siguiente instrucción CASE. SELECT IDUG, TX 1 DÍA, S1 CASO CUANDO RAND () gt 0,50 ENTONCES INT (-10RAND ()) ELSE INT (10 RAND ()) los datos de la tabla stock se muestra a continuación. SELECT proveniente de almacenes SÍMBOLO TRADINGDATE ClosePrice IDUG 2015-01- 01-00.00.00 100 IDUG 2015-01-02-00.00.00 101 IDUG 2015-01-03-00.00.00 102 IDUG 2015-01-04-00.00.00 103 IDUG 2015-01-05-00.00.00 104 IDUG 2015-01-06-00.00.00 105 IDUG 2015-01-07-00.00.00 106 IDUG 2015-01-08-00.00.00 107 IDUG 2015-01-09-00.00.00 108 IDUG 01/10/2015 -00.00.00 109 de 30 días de media móvil Vamos a empezar por mirar un cálculo promedio móvil. Las medias móviles nos permiten mirar a una curva suavizada de puntos de datos. Siempre habrá picos en los valores de los datos, en especial con los datos asociados con el mercado de valores promedios móviles pueden darnos una mejor vista de la tendencia a largo plazo de los datos en vez de buscar puntos de datos individuales. El formato general de una media móvil implica el uso de tres operadores dentro de la instrucción SQL: OVER, la partición y filas entre PRECEDENTE hellip Y fila actual. MÁS SOBRE La función se utiliza en conjunción con una función como AVG. La palabra clave OVER instruye DB2 para calcular el promedio (u otra función) en un rango de valores. Podemos especificar una partición (es decir, un símbolo de la acción), lo que nos dice lo que la columna se utiliza para detener la media móvil. La cláusula de partición partición se utiliza durante el proceso para limitar el cálculo. Una partición se puede pensar en una ventana en los datos que la función se aplica a. En el ejemplo vamos a utilizar la columna de valores como la partición. Básicamente esto significa que cada valor de las acciones en la tabla tendrá su propio valor promedio móvil. Si no especifica una partición, se utilizarán todos los valores de la tabla, sin tener en cuenta el símbolo de cotización. ORDER BY ORDER BY debe especificarse dentro de la cláusula OVER para que los datos se ordena para la función de filas. Usted puede obtener los mismos resultados de partición especificando ORDER BY partitioncolumn, orderingcolumn. ANTERIOR filas entre X e CURRENT ROW Esta es la cláusula que indica a DB2 qué valores debe usarse para calcular el valor medio. El SQL especifica el número de filas antes (anterior) de la fila actual. Así que si queremos un promedio móvil de 30 días, especificaríamos entre el 29 y precedente fila actual. Ahora que tenemos los elementos básicos de un cálculo promedio móvil, aquí está el SQL que nos dará el promedio móvil de 30 días de nuestra mesa stock: 1 CON V1 (SÍMBOLO, TRADINGDATE, MOVINGAVG) AS 3 Seleccionar símbolo, TRADINGDATE, 4 AVG (ClosePrice) 5 OVER (6 DE REPARTO POR SÍMBOLO 7 ORDER BY TRADINGDATE 8 filas entre 29 precedente y CURRENT ROW 11 DONDE SÍMBOLO IDUG 12) 13 Seleccionar símbolo, TRADINGDATE, DEC (MOVINGAVG, 5,2) de V1 14 ORDEN DE SÍMBOLO, TRADINGDATE la primera porción del SQL crea una llamada V1 tabla temporal que contiene el símbolo de la acción, la fecha de negociación, y las medias móviles. Estos cálculos se realizarán dentro del cuerpo de la instrucción WITH. 1 CON V1 (SÍMBOLO, TRADINGDATE, MOVINGAVG) AS SELECT 13 SÍMBOLO, TRADINGDATE, DEC (MOVINGAVG, 5,2) de V1 14 ORDEN DE SÍMBOLO, declaración TRADINGDATE El SELECT después de la cláusula WITH recupera todos los datos de la tabla temporal. Siempre se puede añadir una cláusula BETWEEN para limitar los resultados a un rango específico de datos. DONDE TRADINGDATE ENTRE 01/01/2015 Y 10/01/2015 El verdadero trabajo se lleva a cabo dentro de la cláusula WITH. 3 Seleccionar símbolo, TRADINGDATE, 4 AVG (ClosePrice) 5 OVER (6 DE REPARTO POR SÍMBOLO 7 ORDER BY TRADINGDATE 8 filas entre 29 precedente y CURRENT ROW 11 DONDE SÍMBOLO IDUG La función promedio (AVG) se va a aplicar a la columna de ClosePrice. la función sobre especifica lo siguiente: la partición se basa en el símbolo de cotización (pensar en él como en que pueda ocurrir pausas durante la tramitación de un promedio) Ordenamiento de las filas debe ser hecho por fecha comercio, de manera que tenemos las filas de la adecuada para que el promedio móvil de la media debe tener en cuenta las 29 filas precedentes de la fila actual en trámite (para un total de 30 días) la cláusula FROM selecciona los valores de las acciones específicas que se quieren realizar un seguimiento, aunque podríamos eliminar que desde el ejemplo y que se pueden conseguir medias móviles para todos los stocks en la tabla. la ejecución de la consulta en nuestra mesa de prueba genera el siguiente resultado. SÍMBOLO TRADINGDATE 3 IDUG 2015-01-01-00.00.00 100.00 IDUG 2015-01-02-00.00 .00 100.50 101.00 IDUG 2015-01-03-00.00.00 IDUG 2015-01-04-00.00.00 101.50 102.00 IDUG 2015-01-05-00.00.00 IDUG 2015-01-06-00.00.00 102.50 IDUG 2015- 01-07-00.00.00 103.00 103.50 IDUG 2015-01-08-00.00.00 IDUG 2015-01-09-00.00.00 104.00 104.50 IDUG 2015-01-10-00.00.00 Se podría añadir un toque adicional al selecto comunicado para mostrar el delta entre la media móvil y el valor original. CON V1 (SÍMBOLO, TRADINGDATE, MOVINGAVG) símbolo como SELECT, TRADINGDATE, AVG (ClosePrice) OVER (POR PARTICIÓN símbolos de orden por filas TRADINGDATE entre 29 precedente y V2 CURRENT ROW (SÍMBOLO, TRADINGDATE, ORIGINAL, MOVINGAVG, DELTA) AS SELECT S. símbolo, S. TRADINGDATE, S. CLOSEPRICE, de V1, acciones S DONDE V1.SYMBOLS. SYMBOL Y V1.TRADINGDATES. TRADINGDATE Seleccionar símbolo, TRADINGDATE, ORIGINAL, MOVINGAVG, DELTA dE V2 ORDER BY SÍMBOLO, TRADINGDATE Hay muchas maneras de generar estos resultados, sino una instrucción WITH es una manera conveniente de construir el SQL que queremos ejecutar. los resultados ilustran cómo nuestro medio se calcula sobre el rango de valores. SÍMBOLO TRADINGDATE ORIGINAL MOVINGAVG DELTA IDUG 2015-01-01-00.00 .00 100 100,00 0,00 IDUG 2015-01-02-00.00.00 101 100,50 0,50 IDUG 2015-01-03-00.00.00 102 101,00 1,00 IDUG 2015-01-04-00.00.00 103 101,50 1,50 IDUG 05/01/2015 -00.00.00 104 102,00 2,00 IDUG 2015-01-06-00.00.00 105 102,50 2,50 IDUG 2015-01-07-00.00.00 106 103,00 3,00 IDUG 2015-01-08-00.00.00 107 103,50 3,50 IDUG 2015-01 -09-00.00.00 108 104.00 4.00 IDUG 2015-01-10-00.00.00 109 104.50 4.50 Algunos de ustedes se han preguntado cómo podemos tener un promedio móvil de 30 día en que nuestros datos doesnt en realidad contienen 30 días de datos anteriores a la fila actual. En el resultado anterior, usted notará que el primero de enero tiene un promedio de 100 ya que no había un solo valor en cuestión. La 2ª tiene un promedio de 100.50 porque nuestro total es de 201 para los dos días y luego se divide por dos. Por lo tanto la función mas es lo suficientemente inteligente como para crear una media móvil basada en los valores que están disponibles para la función. Los siguientes resultados utilizan una media móvil de 5 días, lo que demuestra que la función de promedio se limita a 5 días. El delta será siempre 2 después de los 5 días. SÍMBOLO TRADINGDATE ORIGINAL MOVINGAVG DELTA IDUG 2015-01-01-00.00.00 100 100,00 0,00 IDUG 2015-01-02-00.00.00 101 100,50 0,50 IDUG 2015-01-03-00.00.00 102 101,00 1,00 IDUG 04/01/2015 -00.00.00 103 101,50 1,50 IDUG 2015-01-05-00.00.00 104 102,00 2,00 IDUG 2015-01-06-00.00.00 105 103,00 2,00 IDUG 2015-01-07-00.00.00 106 104,00 2,00 IDUG 2015-01 -08-00.00.00 107 105.00 2.00 IDUG 2015-01-09-00.00.00 108 106.00 2.00 IDUG 2015-01-10-00.00.00 109 107.00 2.00 El GAL / Función LEAD Habrá situaciones en las que los datos pueden contener NULL valores y se debe tener cuidado en cómo se utilizan estos valores durante el cálculo de la media móvil. Son valores NULL supuestos a ser tratados como ceros, o si nuestra media móvil a eliminar de nuestro cálculo de la media la instrucción de actualización fijará el 3 de enero. 4º. y 10 th valores de fin de semana de la acción a NULL. 1 de enero se mantuvo como el 100 ya que ese era el punto de partida para la generación de todos los valores. SET NULL ClosePrice DONDE EN TRADINGDATE (2015-01-03,2015-01-04,2015-01-10) Re-emisión de la consulta promedio de 5 días en movimiento da algunos resultados interesantes. SÍMBOLO TRADINGDATE ORIGINAL MOVINGAVG DELTA IDUG 2015-01-01-00.00.00 100 100,00 0,00 IDUG 2015-01-02-00.00.00 101 100,50 0,50 IDUG 2015-01-05-00.00.00 104 101,67 2,33 IDUG 06/01/2015 -00.00.00 105 103.33 1.67 IDUG 2015-01-07-00.00.00 106 105.00 1.00 IDUG 2015-01-08-00.00.00 107 105.50 1.50 IDUG 2015-01-09-00.00.00 108 106.00 2.00 La función de media móvil utiliza sólo los valores no nulos para determinar el promedio móvil. Para valores de las acciones que son nulas en un día en particular, la adición de todos los valores que no son nulos y dividiendo por el número de valores no nulos determinará la media. Por ejemplo, la media móvil en el 10º se calcula como: Habrá situaciones en las que desee la curva de valores para ser continua (a pesar de que no hubo negociación en un día festivo o fin de semana). En casos como este, que desea tener el precio de cierre nula cambiado al último precio de cierre válida. En lugar de modificar nuestros datos, podemos utilizar la función LAG para obtener los valores anteriores utilizadas en un cálculo. La función LAG tiene la siguiente sintaxis: LAG (o plomo) (columna, offset, ValorPredeterminado, NULLS RESPETO IGNORE NULLS) Columna Este campo es o bien el nombre de la columna que queremos que el valor de, o una expresión que incluye el nombre de la columna en el mismo. Offset La función LAG devuelve el valor de la fila que está desplazado un número n de filas antes de la fila actual. Un valor de cero sería la fila actual, 1 sería la fila anterior, y así sucesivamente. El valor predeterminado de desplazamiento es 1. Valor predeterminado El valor predeterminado se utiliza en el caso de que una fila no existe en el desplazamiento (es decir, después de la última fila, o antes de la primera fila). Por ejemplo, para la primera fila en la mesa, un desplazamiento de 1 no existiría, por lo que este valor predeterminado se utilizaría en su lugar. El valor por defecto es nulo. Nulos puede especificar cómo NULLS deben ser manejados durante el procesamiento de los valores. Si se especifica IGNORE NULLS, todas las filas con valores nulos se tendrán en cuenta durante el cálculo. Si se utiliza NULLS respeto, entonces se considerarán nulos. La función LEAD es idéntica a la función LAG, pero los valores se toman de las siguientes filas a diferencia de los anteriores. El siguiente código SQL creará un conjunto de resultados intermedios que rellena los valores nulos con la última válida precio final de valores. La función COALESCE devuelve el primer resultado no nulo en una lista. Si existe el valor de las acciones, su valor es devuelto por la función. De lo contrario, se utiliza la función LAG para encontrar el primer valor no nulo en la tabla antes de la fila actual. CON V1 (SÍMBOLO, TRADINGDATE, EODVALUE) símbolo como SELECT, TRADINGDATE, GAL (ClosePrice, 1, CAST (NULL AS INT), IGNORE NULLS) OVER (partición por el símbolo ORDER BY TRADINGDATEWhile zoológico es grande, a veces hay formas más sencillas. Si usted datos se comporta muy bien, y está espaciada uniformemente, la inserción () la función efectivamente le permite crear múltiples versión retardada de una serie temporal. Si nos fijamos en el interior del paquete VARS para el vector de auto-regresión, se verá que el autor del paquete elige esta ruta . Por ejemplo, para calcular el promedio móvil de 3 período de x, donde x (1 - 20). 2: I arañen una buena respuesta por parte de Achim Zeileis más en la lista r Aquí está lo que dijo: Achim pasó a decir: Nota , que la diferencia entre la media y está rodando la serie agregada se debe a diferentes alineaciones. Esto puede ser cambiado cambiando el argumento align en rollmean () o la nextfri () en la llamada de agregación. contestado 23 09 Jul a las 3:23 su respuesta 2016 Pila de Exchange, Inc


No comments:

Post a Comment