每周到每月报告

时间:2014-12-26 13:23:59

标签: sql sql-server-2012

我正在运行每周报告,如下面的脚本所示。但是,我现在想要运行月度报告,因此需要一些帮助。 每周:

SELECT * FROM TABLE WHERE 
(ARRIVAL_DATE>GETDATE()-7)//7 days before
AND 
(ARRIVAL_DATE<GETDATE()) //NOW

对于月度报告,如果我每隔一次运行,下面的脚本是否正确?

SELECT Column1,...
FROM TableName
WHERE
MONTH(DateColumn) = MONTH(dateadd(dd, -1, GetDate()))
AND
YEAR(DateColumn) = YEAR(dateadd(dd, -1, GetDate()))

感谢。

2 个答案:

答案 0 :(得分:3)

你的逻辑看起来没问题,虽然我会使用day代替dd,因为我觉得它更清楚。

但是,您的查询将阻止在datecolumn上使用索引。以下是一个更好的&#34;逻辑的形式,因为它允许使用索引:

where datecolumn >= dateadd(month, -1,
                            dateadd(day, 1 - day(getdate()), cast(getdate() as date))
                           ) and
      datecolumn < dateadd(day, 1 - day(getdate()), cast(getdate() as date))

这看起来更复杂,但所有函数都在getdate()上,因此引擎可以使用索引。另请注意显式转换为dategetdate()会返回一个时间组件,如果datecolumn只有日期,则该组件可能会抛弃逻辑。

答案 1 :(得分:0)

其中日期列在dateadd(mm, -1,getdate()) and getdate()

之间