2016-07-25 2 views
0

У меня есть столбец Actuals_Date, и я хочу вставлять даты в таблицу в скользящей основе, чтобы предыдущие 6 недель и следующие 8 недель были загружены в таблицу.обрезать дату до недели и сравнить с существующей переменной

За последние 6 недель, у меня есть следующий SQL структура (от Tableau)

[Actuals Date] > DATEADD('week',-6,DATETRUNC('week', TODAY()) - 1) and [Actuals Date] <= DATETRUNC('week', TODAY()) - 1 

и в течение следующих 8 недель после синтаксиса из Tableau:

[Forecast Date] >= DATETRUNC('week', TODAY()) - 1 
and [Forecast Date] <= DATEADD('week', 7,DATETRUNC('week', TODAY()) - 1) 

может кто-то пожалуйста, помогите я конвертирую это в sql-запрос?

+0

Не уверен, что я понимаю ... но Учитывая переменную Date вы хотите запрос для генерации +/- п недель фиников? – objectNotFound

ответ

1

Одним из способов достижения своей цели будет использовать DATEADD()

Предыдущая 6 недель:

SELECT f.MyColumns 
FROM dbo.MyTable f 
WHERE f.MyDateField BETWEEN DATEADD(WEEK,-6,CAST(GETDATE() AS DATE)) AND CAST(GETDATE() AS DATE) 

Следующая 8 недель:

SELECT f.MyColumns 
FROM dbo.MyTable f 
WHERE f.MyDateField BETWEEN CAST(GETDATE() AS DATE) AND DATEADD(WEEK,8,CAST(GETDATE() AS DATE)) 

Примечание: Это предполагает, что f.MyDateField - это дата без времени. Если f.MyDateField имеет время, вы хотите, чтобы CAST как DATE

SELECT f.MyColumns 
FROM dbo.MyTable f 
WHERE CAST(f.MyDateField AS DATE) BETWEEN DATEADD(WEEK,-6,CAST(GETDATE() AS DATE)) AND CAST(GETDATE() AS DATE) 
Смежные вопросы