2016-10-03 98 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你關心的是它應該是無界的前面是一個錯字。 –

相關問題