每月结束的数据准备 - 超过 12 个月

Posted

技术标签:

【中文标题】每月结束的数据准备 - 超过 12 个月【英文标题】:Data Preparation End OF Every Month - Moving Over 12 Months 【发布时间】:2020-02-18 14:55:27 【问题描述】:

我在 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))

有人可以帮我/给我一些建议吗。

提前致谢

【问题讨论】:

用您正在使用的数据库标记您的问题。 因为该查询是特定于产品的。 你的最终结果是什么样的? 【参考方案1】:

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

WHERE DATE = CONVERT(date, EOMONTH(GETDATE()))

注意:这假定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() 的第二个参数是月份偏移量。

【讨论】:

谢谢,非常感谢。意思是不是;那我会得到每月第一天和最后一天的数据吗? @JamesTaylor 。 . .这只是最后一天:“因为我需要每个月底的评估数据。” 对不起,我应该改写“我想在最后一天进行数据准备,但应该是几个月的所有日子(例如从 1 到 31:(1 月为 31 天))跨度> 【参考方案2】:

你也可以试试:

where getdate() <= EOMONTH(GETDATE()) AND
      getdate() > DATEADD(DAY, 1, EOMONTH(GETDATE(), -1))

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

【讨论】:

以上是关于每月结束的数据准备 - 超过 12 个月的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 postgresql 将每月 26 日到下个月 25 日的数据分组?

Paypal 每月定期付款:最少 12 个月 - 可能吗?

递归输入一个日期返回前12个月每月最后一天

自动加月份

js输入一个日期返回当前12个月每月最后一天

PowerShell 从本周五开始获得 12 个月的周五