es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CLICKHOUSE AGRUPAR POR 4 milisegundos

Quiero promediar 4 filas consecutivas (cada 4 milisegundos). Quiero AGRUPAR POR N milisegundos. ¿Cómo puedo hacer eso usando la marca de tiempo o la marca de tiempo UNIX usando el módulo? Básicamente, quiero agrupar por 4 filas, luego promediar esas 4 filas y luego pasar a las siguientes 4 filas. Por favor, comparte el script.

Estoy atascado aquí

INSERT INTO sensor_1000 Values
('2021-01-01 00:00:00.000', 1.52), ('2021-01-01 00:00:00.001', 1.54), ('2021-01-01 00:00:00.002', 1.42), ('2021-01-01 00:00:00.003', 1.54), ('2021-01-01 00:00:00.004', 1.42), ('2021-01-01 00:00:00.005', 1.52), ('2021-01-01 00:00:00.006', 1.54), ('2021-01-01 00:00:00.007', 1.42), ('2021-01-01 00:00:00.008', 1.54), ('2021-01-01 00:00:00.009', 1.42),
('2021-01-01 00:00:00.010', 1.55), ('2021-01-01 00:00:00.011', 1.45), ('2021-01-01 00:00:00.012', 1.55), ('2021-01-01 00:00:00.013', 1.45), ('2021-01-01 00:00:00.014', 1.35), ('2021-01-01 00:00:00.015', 1.55), ('2021-01-01 00:00:00.016', 1.45), ('2021-01-01 00:00:00.017', 1.55), ('2021-01-01 00:00:00.018', 1.45), ('2021-01-01 00:00:00.019', 1.35),
('2021-01-01 00:00:00.020', 1.54), ('2021-01-01 00:00:00.021', 1.44), ('2021-01-01 00:00:00.022', 1.54), ('2021-01-01 00:00:00.023', 1.44), ('2021-01-01 00:00:00.024', 1.34), ('2021-01-01 00:00:00.025', 1.54), ('2021-01-01 00:00:00.026', 1.44), ('2021-01-01 00:00:00.027', 1.54), ('2021-01-01 00:00:00.028', 1.44), ('2021-01-01 00:00:00.029', 1.34),
('2021-01-01 00:00:00.030', 1.53), ('2021-01-01 00:00:00.031', 1.43), ('2021-01-01 00:00:00.032', 1.53), ('2021-01-01 00:00:00.033', 1.43), ('2021-01-01 00:00:00.034', 1.33), ('2021-01-01 00:00:00.035', 1.53), ('2021-01-01 00:00:00.036', 1.43), ('2021-01-01 00:00:00.037', 1.53), ('2021-01-01 00:00:00.038', 1.43), ('2021-01-01 00:00:00.039', 1.33),
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener el promedio de 4 filas consecutivas cada 4 milisegundos y agrupar por N milisegundos, podemos utilizar la marca de tiempo y la marca de tiempo UNIX con módulo. El script a continuación demuestra cómo lograr esto:

    SELECT 
        FLOOR((UNIX_TIMESTAMP(columna_de_marca_de_tiempo) * 1000) / N) as marca_de_tiempo_grupo, 
        AVG(columna_de_valor) as valor_promedio
    FROM (
        SELECT 
            ROW_NUMBER() OVER (ORDER BY columna_de_marca_de_tiempo) as num_fila, 
            columna_de_marca_de_tiempo, 
            columna_de_valor
        FROM sensor_1000
    ) as subconsulta 
    GROUP BY FLOOR((subconsulta.num_fila - 1) / 4), 
             FLOOR((UNIX_TIMESTAMP(subconsulta.columna_de_marca_de_tiempo) * 1000) / N) 
    ORDER BY marca_de_tiempo_grupo ASC;
    

    En el script anterior, reemplace “columna_de_marca_de_tiempo” por el nombre de su columna que contiene las marcas de tiempo y “columna_de_valor” por el nombre de su columna que contiene los valores que desea promediar. También reemplace “N” por el número de milisegundos que desea agrupar.

    Explicación:
    – La subconsulta que contiene ROW_NUMBER() se utiliza para numerar las filas en orden ascendente de la columna de marca de tiempo.
    – Luego, agrupamos tanto por el número de fila dividido por 4 para agrupar cada 4 filas, como por la marca de tiempo UNIX multiplicada por 1000 y dividida por N para agrupar por N milisegundos.
    – Finalmente, seleccionamos la marca de tiempo del grupo (calculada usando la división entera de la marca de tiempo UNIX por N) y el valor promedio de las 4 filas consecutivas dentro de ese grupo.
    – El conjunto de resultados se ordena por la marca de tiempo del grupo en orden ascendente.

Comments are closed.