[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сложный запрос
McLotos
Ребят, всем привет!
Не могу сообразить как получить данные с таблицы.
Есть такой запрос
select
`number`,`DateEnd`,
SEC_TO_TIME(TIMESTAMPDIFF(SECOND,`DateEnd`, `DateChange`)) as `diff`
from `Table`
where `statusId` = 9
and `DateChange` is not null
and
`DateEnd` >= '2017-01-20 00:00:00'
and `DateEnd` < '2017-01-30 00:00:00'
ORDER BY `number`, `DateEnd` ASC

Он выводит по каждому number несколько записей за каждый день.
Мне как-то из этих данных нужно получить среднее значение diff для каждого number за каждый день.
Что-то вроде
number | date | diff
100 | 2017-01-30 | 0:10:15

Т.е. number 100 в среднем был на линии 10 минут 30го января. При этом у конкретного number может быть 20 записей за этот день разной длительности

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
kaww
Надо сгруппировать по number, сложить все интервалы и разделить на количество записей.
select
`number`,`DateEnd`,
SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND,`DateEnd`, `DateChange`))/COUNT(*)) as `diff`
from `Table`
where `statusId` = 9
and `DateChange` is not null
and
`DateEnd` >= '2017-01-20 00:00:00'
and `DateEnd` < '2017-01-30 00:00:00'
GROUP BY `number`
ORDER BY `number`, `DateEnd` ASC
McLotos
kaww
Я попробовал похожее решение, только с функцией AVG, но там получается что у одного number среднее значение больше 14и часов. Чего в принципе не должно быть. Потому-что человек в среднем за месяц не может быть на линии больше 14и часов (раз уж это среднее значение)

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
sergeiss
Я бы так сделал:
1. В твой SELECT добавить собственно number и отдельной колонокой получить день месяца (или день года).
2. Обернуть данный запрос в другой, где сгруппировать одновременно по number и дню месяца (года), получить среднее время diff.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.