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?