как получить данные за последние 9 месяцев? - PullRequest
2 голосов
/ 14 июня 2011

Я работаю над сохраненным процессом и мне нужны данные за последние 9 месяцев.Нужен синтаксис, который автоматически удалит самые старые данные, когда новые данные будут добавлены в таблицу (данные за последние 9 месяцев).

Этот синтаксис будет использоваться в Select Syntax.б

select * from tablename t
left outer join calendartable r on
t.fiscal_month=r.fiscal_month
where t.date > dateadd(m,-9,date) 

Я знаю, что это неправильно.Не могли бы вы, ребята, помочь мне с этим.

Спасибо

Ответы [ 3 ]

5 голосов
/ 14 июня 2011

Возможно, вы хотите, чтобы GETDATE вычислил границу за девять месяцев с этого момента:

where t.date >= dateadd(m,-9, GETDATE())

Помните, что если t.date - это поле даты и времени, а не просто дата, которую вы увидитестранное поведение на границе девяти месяцев, если вы не округлите время до сравнения.

Или если вы сравниваете его с другим значением, например, с датой вставленной записи в вашем триггере, то, что выget, вероятно, в порядке, например, что-то вроде

declare @latest date
select @latest = inserted.date
delete from ... where t.date < dateadd(m, -9, @latest)

, хотя я предлагаю вам на самом деле архивировать данные, а не удалять их.


Поскольку вы пояснили, что вам нужны целые месяцы,то есть 9 месяцев с конца прошлого месяца, вы можете использовать

declare @today date;
declare @firstOfMonth date;
declare @nineMonthsAgo date;
set @today = GETDATE();
set @firstOfMonth = DATEADD(d, 1-DAY(@today), @today);
set @nineMonthsAgo = DATEADD(m, -9, @firstOfMonth);

... WHERE date >= @nineMonthsAgo AND date < @firstOfMonth
1 голос
/ 14 июня 2011

Если вам нужно удалить данные при добавлении новых данных, вам нужно будет сделать это в триггере.И синтаксис внутри триггера будет выглядеть так:

1 голос
/ 14 июня 2011

кажется, что это довольно близко. Вам нужно 9 месяцев прямо сейчас или 9 месяцев с указанной даты?

как насчет:

declare @date datetime

set @date = dateadd(m, -9, getdate()) -- 9 months from right now

select * 
from tablename t
  left outer join calendartable r 
   on t.fiscal_month=r.fiscal_month
where t.date > @date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...