Как получить последние 12 месяцев в sql

у меня есть хранимая процедура, которая запускается каждый месяц, и я всегда хочу запускать скользящие 12 месяцев. У меня есть 2 параметра в моей хранимой процедуре, start_date и end_date. Например, моя дата начала и дата окончания в этом месяце должны быть такими:

declare @start_date date
declare @end_date date

set @start_date = '2016-08-01'
set @end_date = '2015-09-01'
exec myStoredProc
 @DateBegin = @start_date
, @DateEnd = @end_date
, @DateType = 'DISCHARGE DATE'
, @ShowAllResultTables = 'N'

поэтому моя проблема заключается в том, что я не могу автоматизировать дату начала и окончания, чтобы я мог тянуть скользящие 12 месяцев каждый месяц. Я сейчас жестко кодирую.

set @start_date = '2016-08-01'
    set @end_date = '2015-09-01' 

пожалуйста помоги. Спасибо


person moe    schedule 18.09.2016    source источник


Ответы (3)


Declare @Date Date,@DateR1 Date,@DateR2 Date

Set @Date=GetDate()
Set @DateR2=DateAdd(DAY,-Day(@Date)+1,@Date) 
Set @DateR1=DateAdd(MONTH,-13,@DateR2)

Select @DateR1,@DateR2

Возвращает

2015-08-01           2016-09-01
person John Cappelletti    schedule 18.09.2016

    declare @Date datetime = getdate();

WITH T AS(
SELECT 
    DATEADD(month, DATEDIFF(month, 0, @Date), 0) AS Start,
    DATEADD(d, -DAY(DATEADD(m,1,@date)),DATEADD(m,1,@date)) AS EndDate,
    12 Cnt
UNION ALL
SELECT 
    DATEADD(month, -1, Start),
    DATEADD(d, -DAY(DATEADD(m,1,Start-1)),DATEADD(m,1,Start-1)),
    Cnt-1
FROM
    T
WHERE
    Cnt-1>0
)
SELECT 
    Start, EndDate
FROM T

функция SQL за последние 12 месяцев

person schwietertj    schedule 18.09.2016

Основываясь на предыдущем примере, это дает конец прошлого месяца и 12 месяцев назад:

SELECT DATEADD(DAY, -1, DATEADD(MONTH,-N, CAST(getdate()-(day(getdate())-1) AS date))) as EndOfMonth    
FROM  (VALUES (0), (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)) t(N);
person Alan Burstein    schedule 19.09.2016