如何获取SQL Server中前3个月的日期列?
我想知道如何获得sql server中表的前3个月的数据。
表有value
和created_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个月内计算平均值。
试试这个:
Select * from yourTable
Where CreatedDate <= (Select DateAdd(Month, +3, Min(CreatedDate)) from YourTable)
谢谢你的解决方案。这是一个很好的帮助,虽然我必须改变一些要求。 – nnt
这应该给你的参考你的出发点,以得到最小的日期,你可以date add
太或为复合条件的下界使用:
SELECT MIN(created_date) FROM yourtable
试试这个:
DECLARE @minDate DATETIME;
SELECT @minDate = MIN(created_date) FROM YourTable;
SELECT *
FROM YourTable
WHERE created_date <= DATEADD(MONTH, 3, @minDate);
如果您正在使用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>
我认为关键字应该是'UNBOUNDED'而不是'UNBOUND'。我对吗?? – nnt
@nnt你关心的是它应该是无界的前面是一个错字。 –
尝试使用ROWNUM(),ORDER BY OVER上CREATED_DATE下降,然后得到顶(3) –