【发布时间】:2017-07-25 12:25:04
【问题描述】:
早安,
这是我的问题。我有一个表单,用户可以在其中选择他们想要使用的日期。从那里,在 vba 中,我将输入的日期存储在变量 (ytdDate) 中,然后将该日期的年份存储为变量 (dayOfYear)。然后将这些变量值用于以下 sql 语句:
sqlYTDCounts = "SELECT Count(x.event_unique_id) AS total,
Year(occurrence_date) AS year " & _
"FROM (SELECT DISTINCT event_unique_id, occurrence_date
FROM events WHERE datepart('y',occurrence_date) <=" &
dayOfYear & _
") AS x GROUP BY Year(occurrence_date) HAVING
(((Year([occurrence_date]))>='" & _
DatePart("YYYY", ytdDate) - 10 & "') )"
所以基本上正在发生的事情是检索一个记录集,其中每个 [occurrence_date] 的一年中的日期
sql 工作得很好,但仅适用于非闰年,对于所有闰年,它实际上是从用户选择的日期获取前一年中的一天。举个例子:
用户选择 2017 年 7 月 23 日
dayOfYear = 204
但是对于闰年,7 月 23 日是一年中的第 205 天。
在我看来,解决方案似乎很简单:从记录集中检查发生的年份是否是这些年份中的任何一个(2004、2008、2012、2016),以及发生年份的日期是否为该事件> = 60(原因是我不能只检查它是否是闰年,因为 LY 和 NonLY 一年中的同一天直到 60)。
如果满足这两个条件,则 sql 语句的
如果不满足任何条件,则 sql 语句将保持原样。
现在,如何将其转换为 VBA 是我遇到的问题。我曾尝试将 IF THEN ELSE 语句与 sql 语句一起使用,但没有奏效(我很确定我做的不正确)=]
如果这非常令人费解并且没有任何意义,我真的很抱歉,但是非常感谢任何和所有输入/建议/帮助。
谢谢, 标记
【问题讨论】:
-
你为什么要关心一年中的哪一天?为什么不使用
WHERE occurrence_date BETWEEN DateSerial(Year(ytdDate), 1, 1) AND ytdDate? -
为什么不只查询每年的最新日期而不是计算天数呢?如果你使用 DateAdd("yyyy",-1,occurrence_date) 它会给你一年前的日期?
-
@BaconBits 感谢您的意见。我现在就试试。
-
@MintyThanks 芽。我会在尝试 BaconBits 建议后尝试。
-
@BaconBits 当我尝试它时,我收到以下错误:查询表达式'occurrence_date BETWEEN 2017.01.01 and 2017.07.2'中的数字语法错误由于某种原因,最后一位数字被切断了。