SQL Среднее только по рабочим дням - PullRequest
0 голосов
/ 07 июня 2019

У меня есть таблица данных в MS Access как таковая:

[DateID]   |[NameID]|[ValueID]
01/01/2019 |Ben     |5
01/01/2019 |Ace     |6
01/01/2019 |Ken     |7
01/01/2019 |Jon     |10
.
.
.
03/01/2019 |Ben     |8
03/01/2019 |Ken     |55
03/01/2019 |Jan     |52

В основном несколько ValueID записей в один день под разными именами, по крайней мере 100+ записей в день.

Мне нужно вывести среднее значение ValueID по рабочим дням для двух конкретных дат, и код sql выполняется через Excel VB.Пока что код sql не может различать будние и выходные дни.

Код, который у меня есть, работает до сих пор: SELECT AVG([ValueID]) FROM [TABLE] WHERE [DATEID] BETWEEN #10 Jan 2018# AND #15 Feb 2018#

Немного обыскал все вокруг.Самое близкое, что я получил, это SELECT AVG([ValueID]) FROM [TABLE] WHERE ([DATEID] BETWEEN #10 Jan 2018# AND #15 Feb 2018#) AND DATENAME(WEEKDAY, [DATEID]) IN ('MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY')

Однако, это дает мне ошибку Undefined function 'DATENAME' in expression.Не уверен, правильно ли я использую эту функцию, если я полностью честен.

Я понимаю, что технически могу экспортировать диапазон дат в таблицу Excel, а затем исключить его, но это может быть экспорт из данных с массой 10 000+.Поэтому предпочел бы сделать это через sql, так как это выглядит чище.

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Никогда не используйте литералы, так как они локализованы, поэтому:

SELECT 
    AVG([ValueID]) 
FROM 
    [TABLE] 
WHERE 
    ([DATEID] BETWEEN #2018/01/10# AND #2018/01/15#) 
    AND 
    Weekday([DATEID], 2) < 6

В функции День недели , параметр 2 для Понедельник как первый деньнеделю, а затем 6 - это суббота .

1 голос
/ 07 июня 2019

Вам нужно WeekdayName и Weekday, поэтому это будет сделано:

...AND UCase(WeekdayName(Weekday([DATEID], 2))) NOT IN ('SATURDAY','SUNDAY')

Возможно, вам нужно изменить 2 на 1 (илидругое), чтобы получить правильное название дня (2 означает понедельник как начало недели).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...