SQL平均值仅在工作日

SQL平均值仅在工作日,sql,excel,vba,ms-access,Sql,Excel,Vba,Ms Access,我在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条目,每

我在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多个条目

我需要画出两个特定日期的工作日的平均值ID,sql代码通过Excel VB执行。到目前为止,sql代码无法区分工作日和周末

到目前为止,我掌握的代码是:从[TABLE]中选择[DATEID]在2018年1月10日至2018年2月15日之间的平均值[ValueID]

我已经找了一段时间了。我得到的最接近的结果是从[TABLE]中选择平均[ValueID],其中[DATEID]在2018年1月10日至2018年2月15日之间,DATENAMEWEEKDAY[DATEID]在“周一”、“周二”、“周三”、“周四”、“周五”中

但是,它在表达式错误中给了我一个未定义的函数“DATENAME”。如果我完全诚实的话,我甚至不确定我是否正确使用了这个函数

我知道我可以从技术上将日期范围导出到Excel工作表中,然后从中排除,但它可能是一个10k+数据点导出。因此,我更愿意通过sql来实现,因为这样看起来更干净

您需要和,因此这将实现:

...AND UCase(WeekdayName(Weekday([DATEID], 2))) NOT IN ('SATURDAY','SUNDAY')
也许您需要将2改为1或其他,以获得正确的日期名称2代表星期一作为一周的开始。

您需要并且,这样做可以:

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

可能您需要将2改为1或其他以获得正确的日期名称2代表星期一作为一周的开始。

切勿使用文字,因为这些文字是本地化的,因此:

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

在函数Weekday中,参数2表示星期一为一周的第一天,然后,参数6表示星期六。

切勿使用文字,因为文字是本地化的,因此:

SELECT 
    AVG([ValueID]) 
FROM 
    [TABLE] 
WHERE 
    ([DATEID] BETWEEN #2018/01/10# AND #2018/01/15#) 
    AND 
    Weekday([DATEID], 2) < 6
在函数Weekday中,参数2表示星期一为一周的第一天,然后,参数6表示星期六