Этот запрос экранировал меня... Я искал веб-работу более чем день теперь, и я попробовал многочисленные вещи.
Я хочу добраться в среднем количество заказов в течение каждого дня недели от моего дб. Я могу вытянуть общее количество # с КОЛИЧЕСТВОМ очень хорошо. Но я просто не могу выяснить, как добраться, AVG РАССЧИТЫВАЮТ на GROUP BY. Я попробовал подзапросы... функционирует... все... ничто не работает..., возможно, кто-то может уступить мне.
Вот запрос, с которого я запустил ниже. Я знаю, что AVG (КОЛИЧЕСТВО (*)) не будет работать, но я оставлю его во что, потому что это показывает то, что я хочу сделать.
SELECT
AVG(COUNT(*)) AS avgorders,
SUM(total) AS ordertotal,
DAYNAME(STR_TO_DATE(order_time,'%m/%d/%Y %H:%i')) AS day
FROM data
GROUP BY day
ORDER BY DAYOFWEEK(STR_TO_DATE(order_time,'%m/%d/%Y %H:%i')) ASC
То, что вы спрашиваете, не имеет для меня смысла ... AVG - это агрегатная функция, как и COUNT. Что не так с запросом выше, но просто используйте: COUNT (*) AS avgorders?
Допустим, у вас было 3 строки на день 1, 2 строки на день 2, 5 строк на день 3 и 9 строк на день 4 ... вы хотите вернуть результат с одной строкой, который говорит вам:
avgorders = (3 + 2 + 2 + 5 + 9) / 5 = 21 / 5 = 4.2
ordertotal = (3 + 2 + 2 + 5 + 9) = 21
Я не Думаю, вы можете получить это с помощью одного запроса, и вам лучше провести второй раунд агрегации на серверном языке, таком как PHP, оперируя результатами первой агрегации.
Мы находимся в подобной ситуации, в которой вы находитесь (вплоть до шаблонов, на которых мы находимся, и шаблонов, на которых мы хотим быть), хотя у нас есть только исходный код в существующем экземпляре Team Foundation Server. Мы планируем выполнить миграцию с Team Foundation Server 2008 на Team Foundation Server 2010, а не модернизацию. Хотя мы еще не сделали этого, у вас есть два варианта, которые вы наметили.
Этот инструмент позволяет перенести исходный код и отслеживание рабочих предметов в новый командный проект. Он будет «сжимать» даты истории, так как TFS захочет добавить собственную метку времени. Будут некоторые потенциальные проблемы истории, из того, что я понимаю. В частности, в TFS 2010 могут возникнуть проблемы при сравнении версий из предварительно перенесенной системы управления версиями. По крайней мере, до сих пор у меня были эксперименты в нашей лаборатории. Насколько я понимаю, эта проблема связана с режимом элемента по сравнению с режимом с интервалами в качестве значений по умолчанию между двумя версиями. Я могу смотреть на отдельные версии и видеть историю - так, чтобы соответствовать нашим требованиям.
Другой вариант - система управления версиями в одном проекте и рабочие предметы в другом. Я не пробовал это, потому что я мог представить, что отношения набора изменений будут нарушены на существующих рабочих предметах и не будут генерироваться в будущем. Это может быть или не быть большой проблемой для вас.
Кроме того, было бы неплохо описать вашу ситуацию в области обсуждения проекта по Codeplex. Авторы входят в группу миграции TFS в Microsoft и зависят от отзывов людей в той же лодке, что и мы. До сих пор я обменивался с ними парой электронных писем, и они были очень полезны.
Основываясь на наших обсуждениях с очень полезными сотрудниками Microsoft, мы, скорее всего, будем резервировать базы данных и следовать указаниям на записи в блоге Брайана Кригера (Путь 2: Модернизация миграции). Я надеюсь выполнить тестовый запуск при модернизации с использованием старой резервной копии уже на следующей неделе.
Удачи! Я знаю, это пугает. К счастью, мой опыт установки и настройки со свежей установкой TFS 2010 в лаборатории был гораздо более плавным, чем моя первоначальная подверженность с процессом TFS 2008. Надеюсь, вы найдете то же самое правдой.
-121--4196024-Насколько я понимаю, в Linux используется механизм копирования на запись для страниц памяти, передаваемых дочернему процессу.
-121--3909741-Чтобы получить среднее значение, вам не нужны общие итоги за каждый день, вам нужно несколько ежедневных итогов за каждый день.
Day | Count
__________________
Monday 5
Tuesday 4
Monday 6
Tuesday 3
... ...
Тогда вы можете усреднить эти числа. I.e (5 + 6 )/2 для понедельника.
Что-то подобное должно сработать:
SELECT day_of_week, AVG(order_count) average_order FROM
(
SELECT DAYNAME(order_date) day_of_week,
DAYOFWEEK(order_date) day_num,
TO_DAYS(order_date) date,
count(*) order_count
FROM data
GROUP BY date
) temp
GROUP BY day_of_week
ORDER BY day_num
ОБНОВЛЕНИЕ: Я изначально ошибался. Сгруппируйте внутренний SELECT по фактической дате, чтобы получить правильные дневные итоговые значения. Например, вы должны получить, сколько заказов произошло в понедельник (2/1/10) и понедельник (2/8/10) по отдельности. Затем усредните эти итоговые значения по дням недели.
Это подойдет, при условии, что order_time
является полем date
или datetime
(так всем будет удобнее ;)). Конечно, есть некоторое приближение, потому что самый старый заказ может быть в пятницу, а самый новый в понедельник, так что количество для каждого дня недели не одинаково, но создание отдельной переменной для каждого дня недели будет болью в заднице. В любом случае, я надеюсь, что это будет полезно на данный момент.
SET @total_weeks = (
SELECT
TIMESTAMPDIFF(
WEEK,
MIN(order_time),
MAX(order_time)
)
FROM data
);
SELECT
DAYNAME(order_time) AS day_of_week,
( COUNT(*) / @total_weeks ) AS avgorders,
COUNT(*) AS total_orders
FROM
data
GROUP BY
DAYOFWEEK(order_time)