2017-01-11 4 views
-1

У меня есть следующий оператор SQL. Однако он не может работать. Он говорит, что:MS Access Switch Aggregate Function

Ваш запрос не включает указанное выражение «DateValue (Switch (Час ([Date Time])> = 18 А час ([Date Time]) < 22, [Дата время] , Час ([Дата Время])> = 22, [Время Дата], Час ([Дата Время])> = 0 И Час ([Время]] < 2, [Время], Час ([Время])> = 2 и Час ([Дата Время]) < 6, [Дата Время] -1, Час ([Время]]> = 6 И Час ([Дата Время]) < 10, [Дата Время] - 1, Час ([Время по времени])> = 10 и Час ([Дата Время]) < 14, [Дата] -1, Час ([Время]]> = 14 И Час ([Дата Время]) < 18, [Date Time] -1)) Как DateValue 'как часть функции .

SELECT DateValue(Switch(Hour([Date Time])>=18 And Hour([Date Time])<22,[Date Time],Hour([Date Time])>=22,[Date Time],Hour([Date Time])>=0 And Hour([Date Time])<2,[Date Time],Hour([Date Time])>=2 And Hour([Date Time])<6,[Date Time]-1,Hour([Date Time])>=6 And Hour([Date Time])<10,[Date Time]-1,Hour([Date Time])>=10 And Hour([Date Time])<14,[Date Time]-1,Hour([Date Time])>=14 And Hour([Date Time])<18,[Date Time]-1)) As DateValue, Avg([MFR g/10min]) AS Average, Max([MFR g/10min]) - Min([MFR g/10min]) As Difference 
FROM [In process analysis result] 
GROUP BY DateValue([Date Time]); 

Есть ли невдомек, что это не так?

Edit 1: Если я запускаю следующий запрос, он будет работать:

SELECT DateValue(Switch(Hour([Date Time])>=18 And Hour([Date Time])<22,[Date Time],Hour([Date Time])>=22,[Date Time],Hour([Date Time])>=0 And Hour([Date Time])<2,[Date Time],Hour([Date Time])>=2 And Hour([Date Time])<6,[Date Time]-1,Hour([Date Time])>=6 And Hour([Date Time])<10,[Date Time]-1,Hour([Date Time])>=10 And Hour([Date Time])<14,[Date Time]-1,Hour([Date Time])>=14 And Hour([Date Time])<18,[Date Time]-1)) AS DateValue, Avg([MFR g/10min]) AS Average, Max([MFR g/10min]) - Min([MFR g/10min]) As Difference FROM [In process analysis result] GROUP BY Switch(Hour([Date Time])>=18 And Hour([Date Time])<22,[Date Time],Hour([Date Time])>=22,[Date Time],Hour([Date Time])>=0 And Hour([Date Time])<2,[Date Time],Hour([Date Time])>=2 And Hour([Date Time])<6,[Date Time]-1,Hour([Date Time])>=6 And Hour([Date Time])<10,[Date Time]-1,Hour([Date Time])>=10 And Hour([Date Time])<14,[Date Time]-1,Hour([Date Time])>=14 And Hour([Date Time])<18,[Date Time]-1);

Однако результаты не то, что я ищу. Я пытаюсь группировать по дате колонны, DateValue:

enter image description here

DateValue() не сгруппированы, и я не мог получить среднее и разницу между Max и Min.

Пожалуйста, помогите ...

+0

Возможный дубликат [MS Access - SQL Query для среднего значения данных за каждый день] (http://stackoverflow.com/questions/41581378/ms-access-sql-query-for-average-of-each-day-data) – Gustav

+0

Вы бы не компенсировали DateTime так. Изучите свой другой вопрос. – Gustav

ответ

0

ваша функция группирования должна быть такой же, как выбор (добавить: DATEVALUE() к вашим критериям группирования):

SELECT DateValue(Switch(Hour([Date Time])>=18 And Hour([Date Time])<22,[Date Time],Hour([Date Time])>=22,[Date Time],Hour([Date Time])>=0 And Hour([Date Time])<2,[Date Time],Hour([Date Time])>=2 And Hour([Date Time])<6,[Date Time]-1,Hour([Date Time])>=6 And Hour([Date Time])<10,[Date Time]-1,Hour([Date Time])>=10 And Hour([Date Time])<14,[Date Time]-1,Hour([Date Time])>=14 And Hour([Date Time])<18,[Date Time]-1)) AS DateValue, Avg([MFR g/10min]) AS Average, Max([MFR g/10min]) - Min([MFR g/10min]) As Difference FROM [In process analysis result] GROUP BY DateValue(Switch(Hour([Date Time])>=18 And Hour([Date Time])<22,[Date Time],Hour([Date Time])>=22,[Date Time],Hour([Date Time])>=0 And Hour([Date Time])<2,[Date Time],Hour([Date Time])>=2 And Hour([Date Time])<6,[Date Time]-1,Hour([Date Time])>=6 And Hour([Date Time])<10,[Date Time]-1,Hour([Date Time])>=10 And Hour([Date Time])<14,[Date Time]-1,Hour([Date Time])>=14 And Hour([Date Time])<18,[Date Time]-1));