получить среднее количество часов на php языке - PullRequest
1 голос
/ 18 января 2020

У меня есть таблица с 3 столбцами: id start_service stop_service

Мне уже удалось поймать разницу во времени между start_service и stop_service, используя этот запрос:

$query = "SELECT
  TIMEDIFF (stop_service, start_service)  AS tempo 
  FROM
  user_establishment ORDER BY id";

Теперь мне нужно сложить все результаты этого запроса и поделить на количество записей, чтобы получить среднее время всех служб.

Основная проблема - конвертация часов.

Может кто-нибудь помочь мне?

Ответы [ 4 ]

0 голосов
/ 18 января 2020

Если вы хотите, чтобы средняя разница во времени в часах составляла до двух десятичных знаков, вы можете попробовать следующий запрос.

select ROUND(AVG(TIME_TO_SEC(tempo)/3600), 2) as avg_time
from (
    select TIMEDIFF(stop_service, start_service) as tempo
    from user_establishment
) as timeline

Вы можете изменить среднее время различий в соответствии с вашими потребностями.

0 голосов
/ 18 января 2020

Следующий запрос будет использоваться для получения средней разницы во времени. Нет необходимости добавлять предложение ORDER BY при использовании функции AVG () в запросе mysql. Это экономит время на выполнение.

$query = "SELECT AVG(TIMEDIFF(stop_service, start_service)) AS tempo FROM user_establishment";
0 голосов
/ 18 января 2020

Попробуйте, если вам нужно получить результаты в течение нескольких часов. Вы можете опустить деление на 3600, если оно вам понадобится в считанные секунды (это то, что я бы сделал, а затем манипулировал им в своем коде).

SELECT
AVG(TIME_TO_SEC(TIMEDIFF(stop_service, start_service)))/3600  AS tempo 
FROM
user_establishment;

Надеюсь, это поможет!

0 голосов
/ 18 января 2020

Используйте этот запрос для среднего

$query ="SELECT TIME_FORMAT(SEC_TO_TIME(AVG(TIME_TO_SEC(
         TIMEDIFF( stop_service , start_service)))),"%H %i")  AS tempo 
         FROM
         user_establishment";
user $conn = $conexao->query($consulta) or die($conexao->error); 
while ($resultado = $conn->fetch_array()) 
  { echo $resultado["tempo"];  
  }
create table user_establishment ( stop_service datetime, start_service dateTIME)
insert into user_establishment ( stop_service , start_service) Values 
("2020-01-10 13:10:11", "2020-01-10 11:10:10"),
("2020-01-10 13:10:11", "2020-01-10 11:10:10"),
("2020-01-10 13:10:11", "2020-01-10 11:10:10"),
("2020-01-10 13:10:11", "2020-01-10 11:10:10");
SELECT TIME_FORMAT(SEC_TO_TIME(AVG(TIME_TO_SEC(
       TIMEDIFF( stop_service , start_service)))),"%H:%i") as tempo
FROM user_establishment;
| tempo |
| :---- |
| 02:00 |

дБ <> скрипка здесь

...