如何获取最近9个月的数据?

| 我正在处理存储的proc,并且需要最近9个月的数据。需要一种语法,当将新数据添加到表中时(最新的9个月数据),该语法将自动删除最旧的数据。 该语法将在“选择语法”中使用。 我用过
select * from tablename t
left outer join calendartable r on
t.fiscal_month=r.fiscal_month
where t.date > dateadd(m,-9,date) 
我知道这是错的。你们能帮我这个忙吗? 谢谢     
已邀请:
        您可能希望GETDATE从现在开始计算九个月的边界:
where t.date >= dateadd(m,-9, GETDATE())
请注意,如果t.date是一个日期和时间字段,而不仅仅是日期,那么您会在9个月的边界上看到奇怪的行为,除非您也舍入了比较之前的时间。 或者,如果您要将其与另一个值进行比较,例如您在触发器中插入记录的日期,那么您可能就可以了,例如就像是
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
    
        似乎很接近。您现在需要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
    
        如果在添加新数据时需要删除数据,则需要在触发器中执行。触发器内部的sintax就是这样。
DELETE t
FROM 
tablename t
left outer join calendartable r on
t.fiscal_month=r.fiscal_month
where datediff(month, t.date, GETDATE()) > 9
检索数据的选择将相似。
select * from tablename t
left outer join calendartable r on
t.fiscal_month=r.fiscal_month
where datediff(month, t.date, GETDATE()) < 9
    

要回复问题请先登录注册