Mysql consulta datos dentro de un período de tiempo y procesa datos de la misma fecha o tipo

Datos de consulta mysql en un período de tiempo

La tabla se muestra en la figura, el nombre de la tabla es demostración y la tabla es una tabla de actualización en tiempo real de un cierto inventario

 

 

Los datos principales son: datos de tiempo, datos de cantidad de inventario

Los datos de consulta de Mysql en el período de tiempo pueden usar el método between

select  amount
from demo
where time 
between "2021-01-01 00:00:00" and "2022-01-01 00:00:00"

Cabe señalar que si el dato del lado derecho del medio es el mismo, no se contará, es decir, paréntesis abiertos

Si los datos requeridos solo son exactos al día, y los parámetros no tienen hora, minuto y segundo, los datos al final del período de tiempo se perderán, es decir, los datos del 1 de enero no se contarán.

Puede usar el Calendario de Java para expandir el alcance

Calendar gc = Calendar.getInstance();
Date a=productionParam.getEndtime();
gc.setTime(a);
gc.add(Calendar.DAY_OF_MONTH, 1 );
gc.add(Calendar.SECOND,-1);

Agregue un día a los datos finales y reste 1 segundo, que es "2022-01-01 23:59:59", y los datos del 1 de enero se pueden contar

Procesar datos en la misma fecha

Se puede ver que la fecha (exacta al día) del tercer y cuarto ítem es la misma

El procesamiento se puede dividir en dos casos, agregando o eligiendo uno de ellos

La suma se puede hacer usando la función sum () de sql y agrupar por 

Cabe señalar que, debido a que la hora, los minutos y los segundos de los dos datos son diferentes, agrupar por no se puede agrupar directamente. Puede usar DATE_FORMAT de mysql para formatearlos y luego agruparlos. Dado que el formateo y la agrupación no se pueden hacer al mismo tiempo , se requiere una segunda consulta.

select
time,sum(amount)
from(
    select
    DATE_FORMAT(time, '%Y-%m-%d' ) AS time,
    amount
    from demo) as a
group by
a.time

Elige una de las mismas fechas

Suponiendo que los datos de la misma fecha solo necesitan el último dato, puede usar el método MAX() de mysql

Del mismo modo, la fecha también debe formatearse y agruparse, pero la cantidad de datos después de la agrupación no es controlable, y lo más importante es que la fecha no se puede distinguir después del formato. ¿Cuál de los datos de la misma fecha es el más reciente? es decir, se pierde la precisión

Por lo tanto, se debe usar el campo id . La fecha predeterminada se inserta en orden, es decir, la id también se organiza en orden. En este momento, se puede usar la combinación izquierda y derecha para lograr este requisito.

select
id,
time,
amount
from demo
RIGHT JOIN (
     select
        MAX(id) as id
    from(
        select
        id,
        DATE_FORMAT(time, '%Y-%m-%d' ) AS time,
        amount
        from demo) as a
    group by
    a.time ) as b
on id=b.id

Y luego, en la producción

Cambios en la demanda, deben reflejar la suma del inventario de cada día en el período de tiempo, para estadísticas o gráficos de líneas

Hay que volver a clasificarlo según el tipo de dato, y es necesario consultar la suma de todos los tipos de inventario cada día.

Lo más importante es tener una división del período de tiempo, pero aún se deben considerar los datos fuera del período de tiempo (la suma de todos los tipos de inventario) y un valor inicial del inventario antes del inicio del período de tiempo (el punto inicial del gráfico lineal) es obligatorio.

se puede entender como

Para consultar el inventario en un período de tiempo determinado, es decir, la cantidad, debe consultar el inventario total de cada día en el período de tiempo. El inventario total del día es la suma del inventario de todos los tipos (tipos) en ese día, y cada dato en la base de datos es un dato actualizado en tiempo real sobre los niveles de inventario por categoría.

Al consultar, se seleccionan los datos más recientes cuando el mismo tipo de datos aparece el mismo día, y cuando la cantidad total de inventario consultada no está al principio del período de tiempo, se debe consultar el valor inicial, es decir, el cantidad total de inventario antes del período de tiempo, es decir, cuando Cuando el inventario de cualquier tipo no está al principio del período de tiempo, el valor inicial antes del período de tiempo debe consultarse y usarse para el cálculo del inventario total posterior

En este momento, la consulta de la base de datos por sí sola no puede satisfacer la demanda.

mi solución es

Consulte todos los números de tipo de los datos de producción, coloque el valor inicial del tipo antes del período de tiempo de consulta uno por uno y colóquelo en la matriz, y luego agrupe por dos campos (tiempo y tipo) para obtener diferentes tipos de real- tiempo cambiando datos, excluyendo el mismo tipo en el mismo Los datos del día cambian y, finalmente, de acuerdo con la fecha, el tipo y el inventario consultado, el valor del inventario en la matriz se reemplaza y calcula continuamente.

¿Se puede resolver este problema usando solo sql?

Supongo que te gusta

Origin blog.csdn.net/xsj5211314/article/details/123164462
Recomendado
Clasificación