2017-01-11 3 views
0

У меня есть набор данных, охватывающих 3 дня. На основании первого столбца слева можно ли получить запрос, который вычисляет среднее значение значений в третьем столбце слева на основе каждого дня?MS Access - SQL-запрос для среднего значения каждого дня

Конечный результат будет две колонки:

1/1/2008 | 1.605 
2/1/2008 | 1.59 
3/1/2008 | 1.56 

Я думаю, что логика будет что-то вроде в цикле:

  • Основываясь на день в первой колонке, если это в тот же день подсчитайте количество строк и добавьте значения третьего столбца
  • Используйте сумму значений третьего столбца и разделите на количество строк, чтобы получить Среднее значение
  • день + 1

Но как мы можем реализовать цикл в MS Access?

Вот набор данных:

enter image description here

Edit: Если я хочу, чтобы сгруппировать по дате, где день между вчерашней 6PM сегодняшней 6PM?

Пункт BETWEEN должен проверить записи, которые находятся между вчерашним 18:00:00 и сегодняшним 18:00:00. Например, для 1/1/2008 запись начнется с 1/1/2008 6:00PM до 2/1/2008 6:00PM. Для 01.02.2008 запись начнется с 2/1/2008 6:00PM по 01.03.2008 6:00 вечера. Так далее и так далее ...

У меня есть фрагмент кода, который проверяет это:

([In process analysis result].[Date Time]) Between Date()-1+#12/30/1899 18:0:0# And Date()+#12/30/1899 18:0:0#) 

Но это только группы на один день раньше. Как я могу подать заявку на набор данных?

Редактировать 2: Это запрос, который я сделал, но он по-прежнему не является правильным. Любая идея, что не так?

SELECT DateValue([Date Time]) As DateValue, Avg([MFR g/10min]) AS [AvgOfMFR g/10min] 
FROM [In process analysis result] 
WHERE ((([Date Time])>Now()-365) AND (([Operation Grade-Load]) Like "EX*") AND (([Date Time]) Between [Date Time]-1+#12/30/1899 18:0:0# And [Date Time]+#12/30/1899 18:0:0#)) 
GROUP BY DateValue([Date Time]); 
+0

Цените любые советы по этому вопросу, пожалуйста. –

ответ

0

выберите AVG значения и GROUP BY даты

+0

Благодарим вас за ответ. Не могли бы вы обратиться к моему редактированию? –

+0

Извините, но вы все еще ищете ответ ... Самый быстрый ответ - это настроить другой столбец (назвать его абсолютной датой или чем-то еще) и использовать формулу, чтобы добавить 6 часов к Дата. Таким образом, вы можете группировать эту «абсолютную» дату, но это действительно относится к вашему периоду времени с 6 часов до этого. – geeFlo

0

Ваша логика выглядит в основном правильно. Предложение where отключается. Начните с этого:

SELECT DateValue(DateAdd("h", 6, [Date Time])) As DateValue, 
     Avg([MFR g/10min]) AS [AvgOfMFR g/10min] 
FROM [In process analysis result] 
WHERE [Date Time] > DateAdd("yyyy", -1, DateAdd("h", 6, Now())) AND 
     [Operation Grade-Load] Like "EX*" 
GROUP BY DateValue(DateAdd("h", 6, [Date Time])); 

Я не уверен, что условие BETWEEN предполагается делать. Если вы хотите указать определенный диапазон дат, просто используйте константы даты.

Редактировать: Дата/время должно быть компенсировано 6 часов, как в вышеприведенном редактирования. И следует использовать правильное выражение в течение 1 года. Не уверен, что текущее время должно быть сдвинуто на 6 часов (показано); если нет, просто удалите DateAdd of Now().

+0

Благодарим вас за ответ. Предложение «BETWEEN» - проверить записи, которые находятся между вчерашним 18:00:00 и сегодняшним 18:00:00. Например, для ** 1/1/2008 ** запись начнется с '1/1/2008 6:00 PM' до' 1/1/2008 6:00 PM'. Для ** 2/1/2008 ** запись начнется с «1/1/2008 6:00 PM» до 1/1/2008 6:00 PM'. Будет ли это возможно? –

+0

Ваша статья _Where_ не может работать. См. Мое редактирование ответа от @Gordon. – Gustav

+0

@Gustav Спасибо за ваше редактирование. Я пытаюсь понять смещение DateTime. Как я могу увидеть значения, используемые для вычисления среднего? Просто пытаюсь проверить результаты. –

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