有没有一种方法可以将总和限制为表格中的计算日期?

时间:2019-02-14 15:29:19

标签: sql sql-server

我有一个包含SentDate和RefundAmounts的表格。我想总结从日期到未来一年每一行的每一行的金额。

在下面的示例中,我想添加一列,表示年份的总和。 该金额应是第一行从'2006-12-14'到'2007-12-14'的退款总额,即3696,22,因为在此期间没有退款。 第二行是从“ 2007-12-24”到“ 2008-12-24”,即463,05

SentDate    YearAhead   RefundAmount
2006-12-14  2007-12-14      3696,22       
2007-12-24  2008-12-24  394,35  
2008-12-18  2009-12-18  44,33   
2008-12-19  2009-12-19  24,37   
2009-12-16      2010-12-16  21,88   

我尝试了类似的方法

select SentDate, dateadd(year,1,sentdate) YearAhead, SumRefund 
from table 

但我不知道如何获取每一行的年度未来总金额

谢谢你的建议。最终结果应如下所示:

SentDate    YearAhead   RefundAmount    SumForYear
2006/12/14  2007/12/14  3696,22          3696,22
2007/12/24  2008/12/24  394,35           463,05
2008/12/18  2009/12/18  44,33            90,58
2008/12/19  2009/12/19  24,37            46,25
2009/12/16  2010/12/16  21,88            21,88

2 个答案:

答案 0 :(得分:0)

如果您始终需要一整年的时间,则应满足以下需求:

select sum(refund) as refundAmounts,year(min(SentDate)) as year from yourTable group by year(SentDate)

year函数仅从日期时间行中获取年份部分,并且具有group by,您可以将sum和min函数的聚合划分为不同的组。

答案 1 :(得分:0)

您需要与BETWEEN联接以收集组成该时间段的所有行,然后将GROUP BYSUM一起使用以得出结果。

select 
    T.SentDate, 
    dateadd(year, 1, T.SentDate) YearAhead, 
    SUM(P.SumRefund) AS TotalOverYear
from 
    YourTable AS T
    INNER JOIN YourTable AS P ON P.SentDate BETWEEN T.SendDate AND DATEADD(YEAR, 1, T.SendDate)
GROUP BY
    T.SentDate