Конец каждого месяца подготовки данных - переезд более 12 месяцев - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть процедура подготовки данных в SQL. Я хочу, чтобы подготовка данных производилась в конце каждого месяца. Скажем, я хочу, чтобы процедура выполнялась в последний день месяца, например, 31 января 2020 года, она должна подготовить данные с 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))

Может ли кто-нибудь, пожалуйста, помочь мне / дать мне несколько предложений.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Вы также можете попробовать:

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

Вместо getdate () вы можете использовать столбец даты.

0 голосов
/ 18 февраля 2020

Если вы хотите последний день текущего месяца, используйте eomonth():

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

Примечание. Предполагается, что в столбце date нет компонента времени. В этом случае:

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

SQL Сервер будет по-прежнему использовать индекс (если доступен) даже для этого типа преобразования.

РЕДАКТИРОВАТЬ:

Кому получить данные о текущих месяцах, один из методов:

WHERE DATE <= CONVERT(date, EOMONTH(GETDATE())) AND
      DATE > CONVERT(date, EOMONTH(GETDATE(), -1)) 

Второй аргумент EOMONTH() - это смещение по месяцам.

...