vba中的SQL查询在上个月下降到第二个

Box*_*oxx 6 sql sql-server excel vba excel-vba

我已经在很长一段时间内搜索了我的问题的解决方案,但似乎无法找到有效的答案.我有一张表格,根据日期和案例类型向不同的律师提供案件.请记住,在VBA和SQL方面,我是新手

我正在做的事情:

我需要将大量的案例分类为每个律师根据日期获得的案件数量,在这种情况下,上个月会重复出现.基本上我需要能够每月按一个按钮,然后自动检索上个月的数据并将其放在Excel工作簿中.除了以下问题之外,所有这些实际上都成功了

问题:

每当我运行宏时,它都不会检索全部数量.例如,2月份我知道有159个新病例,但公式只能找到155现在我可以得到正确的结果,通过提示的inputbox一个startdate,并enddate和输入格式DD/MM/YY HH/MM/SS-但我想删除的inputbox部分,所以我不必输入任何东西.代码应该自动进入其肠道的最后一个月.对于二月它看起来像01/02/18 00:00:0128/02/18 23:59:59

我认为问题是因为我目前的公式并没有全程延伸,因此不包括小时,分钟和秒 - 或类似的东西.

我也非常有信心可以通过该dateadd功能修复它,我只是不知道如何.你如何指定一个StartdateEnddate包括整个月,直到第一个和最后一个?

可能是一个非常简单的修复,但它超出了我

码:

Dim Startdate As Date
Dim Enddate As Date

Startdate = DateSerial(Year(Now), Month(Now) - 1, 1)
Enddate = DateSerial(Year(Now), Month(Now), 0)

Debug.Print Startdate, Enddate

Set rs = conn.Execute("Select [Jurist], [OpretDato], [Tilgang] From [dbo].[TilgangOgAfgangAfSagerTilgangIPeriodenView]" & _
"Where [OpretDato] Between '" & Startdate & "' And '" & Enddate & "' and (Jurist not in ('BF','MLT','NL') or Jurist is null)" & _
"Order by [Jurist] ASC ;")
Run Code Online (Sandbox Code Playgroud)

ash*_*awg 4

您的四条记录可能缺少最后一天的记录,因为2018-02-28== 2 月 282018-02-28 00:00:00凌晨。

您的公式的另一个问题:想想 2019 年 1 月会发生什么...您的公式(以及此处的其他答案)将返回:

Year = 2019  Month = 0  Day = 1
Run Code Online (Sandbox Code Playgroud)

显然,这是行不通的。您不能仅仅“从月份中减去 1”来始终获得上个月的值。

另外,您不应指定 的结束时间23:59:59和 开始时间00:00:01,因为您每年会跳过超过12 分钟...以及12 月份


这是处理“上个月”条件的正确方法:

EndDate = DateSerial(Year(Now), Month(Now), 1)
StartDate = DateSerial(Year(EndDate - 1), Month(EndDate - 1), 1)
Run Code Online (Sandbox Code Playgroud)

然后你的SQL标准是:

WHERE ([RecordDateTime] >= StartDate And [RecordDateTime] < EndDate)
Run Code Online (Sandbox Code Playgroud)

请注意,该=标准不包含在后半部分中。


您调整后的代码:

Set rs = conn.Execute("Select [Jurist], [OpretDato], [Tilgang] " & _
    "From [dbo].[TilgangOgAfgangAfSagerTilgangIPeriodenView]" & _
    "Where [OpretDato] >= '" & Startdate & "' And [OpretDato] < '" & _
    Enddate & "' and (Jurist not in ('BF','MLT','NL') or Jurist is null)" & _
    "Order by [Jurist] ASC ;")
Run Code Online (Sandbox Code Playgroud)