Sql 每月末数据准备-移动超过12个月

Sql 每月末数据准备-移动超过12个月,sql,sql-server,date,monthcalendar,Sql,Sql Server,Date,Monthcalendar,我有SQL中的数据准备过程。我想在每个月底准备数据 假设我希望程序在当月最后一天运行,例如2020年1月31日,它应准备1月1日至1月31日的数据 所以这是一年中所有月份的移动窗口。因为我需要每个月底的评估数据 我试过了,但是,这并没有实现自动化。它有点像每月末的人工运行 select '2020-10-01' as beginDate_AnalysisWindow , '2020 -01-31' as endDate_AnalysisWindow into #AnalysisWin

我有SQL中的数据准备过程。我想在每个月底准备数据 假设我希望程序在当月最后一天运行,例如2020年1月31日,它应准备1月1日至1月31日的数据

所以这是一年中所有月份的移动窗口。因为我需要每个月底的评估数据

我试过了,但是,这并没有实现自动化。它有点像每月末的人工运行

select '2020-10-01' as beginDate_AnalysisWindow  
, '2020 -01-31' as endDate_AnalysisWindow 
   into #AnalysisWindow --create temporary table #AnalysisWindow 
我也尝试了以下方法,但是,我不确定这是一个月还是一天

SELECT START_OF_MONTH_DATE AS beginDate_AnalysisWindow
,END_OF_MONTH_DATE AS endDate_AnalysisWindow
INTO #AnalysisWindow
FROM [dbo].[Date] WITH (NOLOCK)
WHERE DATE = DATEADD(dd, - 1,  CAST(GETDATE() AS DATE))
有人能帮我/给我一些建议吗


提前感谢

如果您想要当月的最后一天,请使用
eomonth()

注意:这假设
date
列没有时间组件。如果是这样的话:

WHERE CONVERT(date, DATE) = CONVERT(date, EOMONTH(GETDATE()))
即使对于这种类型的转换,SQL Server仍将使用索引(如果可用)

编辑:

要获取当前月份数据,一种方法是:

WHERE DATE <= CONVERT(date, EOMONTH(GETDATE())) AND
      DATE > CONVERT(date, EOMONTH(GETDATE(), -1)) 
其中日期转换(日期,EOMONTH(GETDATE(),-1))
EOMONTH()
的第二个参数是月偏移量。

您也可以尝试:

where getdate() <= EOMONTH(GETDATE()) AND
      getdate() > DATEADD(DAY, 1, EOMONTH(GETDATE(), -1))
其中getdate()DATEADD(天,1,月(getdate(),-1))

您可以使用日期列来代替getdate()。

用您正在使用的数据库标记您的问题。因为该查询是特定于产品的。您的最终结果是什么样的?非常感谢。这是否意味着;那么我将从每月的第一天和最后一天获取数据?@JamesTaylor。这只是最后一天:“因为我需要在每个月底进行评估的数据。”抱歉,我应该重新表述“我想在最后一天准备数据,但这应该是每个月的所有天数(例如,从1日到31日:(1月31日))
where getdate() <= EOMONTH(GETDATE()) AND
      getdate() > DATEADD(DAY, 1, EOMONTH(GETDATE(), -1))