2

我有一个查询正在收集从上个月 20 日到本月 19 日的数据,它似乎正在工作。

(DateTime >= 19+dateadd(mm,datediff(mm,0,getdate())-1,0)   
AND  DateTime <  18+dateadd(mm,datediff(mm,0,getdate()),0)) 

我现在需要以某种方式对其进行修改以满足以下要求...

无论何时运行,始终显示当前报告。

目前发生的情况是......如果在上个月 20 日和本月 19 日之间的任何时间运行,它会很好......但只要它在本月 20 日到本月 31 日运行。 ...它一直显示最后一个时期...。从技术上讲,我要求它这样做。

我需要的是......当它成为这个月的 20 日......它开始一个新的报告。

正如我所说的......问题期是在20日和月底之间。一旦新的一个月开始......一切都很好。

在运行报告时,它必须以某种方式考虑在内。

谢谢。

戴夫

4

2 回答 2

0

戴夫,我认为这可能对你有用。

    (
         (Day(GetDate()) > 19 and create_date between dateadd(mm, datediff(mm, 0, getdate()), 0) + 19 and dateadd(mm, datediff(mm, 0, getdate()), 0) + 18)
         or (Day(GetDate()) < 20 and create_date between dateadd(mm, datediff(mm, 0, getdate())-1, 0) + 19 and dateadd(mm, datediff(mm, 0, getdate())-1, 0) + 18)
    )

它本质上检查当前日期是否大于 19 并应用您当前的逻辑而不减去一个月。我当天小于您当前逻辑应用的第 20 天。

于 2012-10-30T17:00:13.427 回答
0
(
 DateTime >= CASE WHEN day(GETDATE()) >= 20 THEN 19 + dateadd(mm, datediff(mm, 0, getdate()), 0) ELSE 19 + dateadd(mm, datediff(mm, 0, getdate()) - 1, 0) END AND
 DateTime < CASE WHEN day(GETDATE()) >= 20 THEN 18 + dateadd(mm, datediff(mm, 0, getdate())+ 1, 0) ELSE 18 + dateadd(mm, datediff(mm, 0, getdate()), 0) END
)
于 2012-10-30T17:16:31.647 回答