2016-10-03 933 views
1

我想知道如何获得sql server中表的前3个月的数据。
表有valuecreated_date列:如何获取SQL Server中前3个月的日期列?

╔═══════════════════════════════════╗ 
║ value  created_date   ║ 
╠═══════════════════════════════════╣ 
║ 13   2013-08-20 11:30:00 ║ 
║ 7   2013-08-20 04:30:00 ║ 
║ 9   2013-08-21 11:30:00 ║ 
║ 11   2013-08-22 11:30:00 ║ 
║ .     .   ║ 
║ .     .   ║ 
║ .     .   ║ 
║ 18   2016-10-03 11:30:00 ║ 
╚═══════════════════════════════════╝ 

当我使用DateADD(month, 3, getDate()),它只返回下一个3个monthss当前日期的。所以,我不知道如何得到它们。

我的实际问题是我想计算前3个月的平均值。我的计划是从表格中获取最短日期,然后在接下来的3个月内计算平均值。

+0

尝试使用ROWNUM(),ORDER BY OVER上CREATED_DATE下降,然后得到顶(3) –

回答

2

试试这个:

Select * from yourTable 
Where CreatedDate <= (Select DateAdd(Month, +3, Min(CreatedDate)) from YourTable) 
+0

谢谢你的解决方案。这是一个很好的帮助,虽然我必须改变一些要求。 – nnt

0

这应该给你的参考你的出发点,以得到最小的日期,你可以date add太或为复合条件的下界使用:

SELECT MIN(created_date) FROM yourtable 
0

试试这个:

DECLARE @minDate DATETIME; 

SELECT @minDate = MIN(created_date) FROM YourTable; 

SELECT * 
FROM YourTable 
WHERE created_date <= DATEADD(MONTH, 3, @minDate); 
2

如果您正在使用MS SQL Server 2012或更高,您可以使用Windowing Functions来实现此目的。你可以使用无界前面和后面2行。你的代码看起来是这样的:

SELECT value, 
     AVG(value) OVER (PARTITION BY value ORDER BY CREATED_DATE ROWS BETWEEN UNBOUNDED PRECEDING AND 2 FOLLOWING) 
     AS '3_month_avg' 
FROM <yourtable> 
+0

我认为关键字应该是'UNBOUNDED'而不是'UNBOUND'。我对吗?? – nnt

+1

@nnt你关心的是它应该是无界的前面是一个错字。 –

相关问题