Автоматизация запросов на каждый месяц - PullRequest
0 голосов
/ 06 июня 2018

У меня есть запрос ниже:

select a.ID, 
       a.Date_Reported, 
       b.Date_Received
from tx_ext a 
join tx b on b.id = a.id
AND b.Date_Reported >= convert( datetime, '2018-05-01' ) 
AND b.Date_Reported <= convert( datetime, '2018-05-31' )

Как вы видите, я в настоящее время вручную устанавливаю дату для мая (последний месяц).Как я могу изменить свой запрос, чтобы в каком бы месяце я ни находился, я всегда запускаю полный предыдущий месяц.Так, например, в этом месяце июнь, поэтому я хотел бы использовать значения по одному.А следующий месяц - июль, поэтому я хотел бы запустить июнь.

Я хочу автоматизировать это, поэтому мне не нужно вручную вводить даты каждый месяц

спасибо

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Рассмотрите и эту форму (ее можно использовать в более старых версиях SQL Server).

select a.ID, 
       a.Date_Reported, 
       b.Date_Received
from tx_ext a 
join tx b on b.id = a.id
AND YEAR(b.Date_Reported) = CASE WHEN MONTH(GETDATE()) = 1
                                 THEN YEAR(GETDATE()) - 1
                                 ELSE YEAR(GETDATE())
                            END
AND MONTH(b.Date_Reported = CASE WHEN MONTH(GETDATE()) = 1
                                 THEN 12
                                 ELSE MONTH(GETDATE()) - 1
                            END
0 голосов
/ 06 июня 2018

Вы можете использовать:

select a.ID, 
       a.Date_Reported, 
       b.Date_Received
from tx_ext a 
join tx b on b.id = a.id
AND b.Date_Reported >= DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) 
AND b.Date_Reported <= EOMONTH(GETDATE());

Демо DBFiddle

Обратите внимание, что дата окончания 30/06/2018 00:00:00, поэтому я предполагаю, что высохранить Date_Reported как DATE (не DATETIME).Если у вас есть часть времени, вам нужно изменить на:

AND b.Date_Reported < DATEADD(d,1,EOMONTH(GETDATE())) 

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

select a.ID, 
       a.Date_Reported, 
       b.Date_Received
from tx_ext a 
join tx b on b.id = a.id
AND b.Date_Reported>=DATEADD(month,-1,DATEADD(month,DATEDIFF(month,0,GETDATE()),0))
AND b.Date_Reported<DATEADD(d,1,EOMONTH(GETDATE(),-1)) ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...