我在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多个条目。
我需要绘制2个特定日期平日的平均ValueID
,然后通过Excel VB执行sql代码。到目前为止,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工作表中,然后从中排除,但可能会导出1万多个数据点。因此,它更喜欢通过sql来完成,因为它看起来更干净。
答案 0 :(得分:1)
您需要WeekdayName
和Weekday
,因此可以做到这一点:
...AND UCase(WeekdayName(Weekday([DATEID], 2))) NOT IN ('SATURDAY','SUNDAY')
也许您需要将2更改为1(或其他值)才能获得正确的日期名称(2代表星期一作为一周的开始)。
答案 1 :(得分:1)
从不使用文字,因为它们是本地化的,因此:
SELECT
AVG([ValueID])
FROM
[TABLE]
WHERE
([DATEID] BETWEEN #2018/01/10# AND #2018/01/15#)
AND
Weekday([DATEID], 2) < 6
函数 Weekday 中,参数2是 Monday 作为一周的第一天,然后6是 Saturday 。 / p>