2015-08-24 3 views
-1

У меня есть система, которая, помимо прочего, полагается на более высокий, чем средний объем, для запуска предупреждения. Моя база данных была взломана, и существующие средние значения неверны. Это ответ на вопрос, почему мне нужно такое. Я хочу установить средний объем для каждой даты, возвращаясь к 1/1/2014.Средние значения для каждого дня в таблице mysql

Я пробовал следующие варианты (а затем некоторые) операторов SELECT для тестирования, но я продолжаю получать либо единую дату данных, либо общий объем каждого дня, а не средний день за 30/60/90 для каждого дата:

SELECT `date`, AVG(`total_volume`) AS 'avg_volume' FROM `table`WHERE `symbol`= "ABCD" AND `date`> (`date`-90); 

SELECT `date` , AVG( `total_volume`) AS 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" GROUP BY `date` -90; 

SELECT `date` , AVG(`total_volume`) AS 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" AND `date` > `date` -90 GROUP BY `date` ORDER BY `date` DESC; 

SELECT `date` , AVG(SUM(`total_volume`)) AS 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" AND `date` > `date` -90 GROUP BY `date` ORDER BY `date` DESC; 

SELECT `date` , SUM( `total_volume`) /30 AS 'avg_volume' FROM `table` WHERE `symbol` = "ABCD"; 

SELECT `date` , SUM( `total_volume`) /90 AS 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" GROUP BY `date` -90 ORDER BY `date` DESC; 

SELECT `date` , SUM( `total_volume`) /90 AS 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" AND `date` BETWEEN `date` -90 AND `date` GROUP BY `date` ORDER BY `date` DESC; 

SELECT `date` , AVG( `total_volume`) AS 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" AND `date` BETWEEN `date` -90 AND `date` GROUP BY `date` -90 ORDER BY `date` DESC; 

SELECT `date` , AVG( `total_volume`) AS 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" AND `date` BETWEEN `date` -90 AND `date` GROUP BY `date` -90 ORDER BY `date` BETWEEN `date` -90 AND `date` DESC; 

Любые предложения?

+0

Ваш вопрос остается неясным. Если вам нравится, подумайте о следующем простом двухэтапном курсе действий: 1. Если вы еще этого не сделали, укажите надлежащие DDL (и/или sqlfiddle), чтобы мы могли легче реплицировать проблему. 2. Если вы еще этого не сделали, укажите желаемый результирующий набор, который соответствует информации, представленной на шаге 1. – Strawberry

+0

Я думаю, что мы близки к этому, но это дает нам форвардное среднее значение, а не среднее значение для конкретного Дата . единственный способ, с помощью которого я могу увидеть, что на самом деле может работать: SET 'avg_volume' = (SELECT AVG ('total_volume') WHERE' date'BETWEEN "20150526" AND "20150826" GROUP BY 'symbol') WHERE' date' = '20150826 «... а затем смешная задача вернуться назад на два года и управлять командой каждый день ... должен быть более простой способ ... – user3762306

ответ

0

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

SELECT YEAR(`date`) as 'year', DAY(`date`) as 'day', `date`, AVG(`total_volume`) as 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" AND `date` > '2014-01-01 00:00:00' GROUP BY 1, 2 

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

Ежемесячно:

SELECT YEAR(`date`) as 'year', MONTH(`date`) as 'month', `date`, AVG(`total_volume`) as 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" AND `date` > '2014-01-01 00:00:00' GROUP BY 1, 2 

Bi-ежемесячно:

SELECT YEAR(`date`) as 'year', CEIL(MONTH(`date`)/2) as 'bimonth', `date`, AVG(`total_volume`) as 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" AND `date` > '2014-01-01 00:00:00' GROUP BY 1, 2 

Quarterly:

SELECT YEAR(`date`) as 'year', CEIL(MONTH(`date`)/3) as 'quarter', `date`, AVG(`total_volume`) as 'avg_volume' FROM `table` WHERE `symbol` = "ABCD" AND `date` > '2014-01-01 00:00:00' GROUP BY 1, 2 

Я использовал this придумать идею

+0

Простите, пожалуйста, несите меня. Я был взломан снова дважды на этой неделе, и я имею дело с этим кризисом, но я знаю, что это открыто, пока я не отвечаю схемой. – user3762306

Смежные вопросы