Stack Overflow en español Asked on December 18, 2021
Necesito calcular un tiempo promedio entre registros de una tabla, para que la respuesta sea algo así como: promedio = 1 hora 22 minutos
| Mensaje | Fecha de creacion |
|-----------|---------------------|
| Hola | 2020-05-01 13:13:54 |
| Adios | 2020-05-01 13:13:58 |
| Hola | 2020-05-01 13:14:01 |
| Hola | 2020-05-02 20:13:51 |
| Adios | 2020-05-02 20:13:58 |
| Hola | 2020-05-02 20:14:24 |
Esta información la obtengo de la siguiente manera:
SELECT mensaje, fecha_creacion FROM mensajes WHERE usuario = 58;
Para MySQL anterior a 8.0, que no hay CTE y algunas otras cosas, habría que armar una relación entre la tabla y sí misma.
Creé esta tabla de ejemplo:
CREATE TABLE IF NOT EXISTS `mensajes` (
`mensaje` varchar(255) NOT NULL,
`fecha_crea` DATETIME NOT NULL
) DEFAULT CHARSET=utf8;
INSERT INTO `mensajes` (`mensaje`, `fecha_crea`) VALUES
('3 Ah', NOW()),
('1 Eh', DATE_ADD(NOW(), INTERVAL -4 HOUR)),
('4 Uh!', DATE_ADD(NOW(), INTERVAL 1 HOUR)),
('2 Oh.', DATE_ADD(NOW(), INTERVAL -1 HOUR));
La consulta sugerida sería algo así:
SET @row_number = 0;
SET @row_number2 = 0;
SELECT *,
abs(TIMESTAMPDIFF(MINUTE, ms1.fecha_crea, ms2.fecha_crea)) as tsdiff_min,
abs(TIMESTAMPDIFF(SECOND, ms1.fecha_crea, ms2.fecha_crea)) as tsdiff_sec
FROM
(
SELECT
(@row_number:=@row_number + 1) AS `num`,
`mensajes`.*
FROM `mensajes`
ORDER BY `fecha_crea` ASC
) ms1
INNER JOIN (
SELECT
*,
(@row_number2:=@row_number2 + 1) AS num2
FROM `mensajes`
ORDER BY `fecha_crea` ASC
) ms2
ON ms1.`num` = (`num2` + 1)
ORDER BY ms1.num ASC;
Las variables row_numberx
emulan un rownum del resultado de cada subconsulta.
El inner join une el registro con el inmediatamente anterior. El resultado es algo así:
Las diferencias se representan como valores absolutos.
En el select exterior pongo varios ejemplos de cómo representar las diferencias entre fechas. Ya con este resultSet, podrías armar una consulta que calcule el AVG de la columna con el formato que elijas y tendrías el valor que buscas.
Answered by Alfabravo on December 18, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP