我正在尝试对此表进行查询:
Id startdate enddate amount
1 2013-01-01 2013-01-31 0.00
2 2013-02-01 2013-02-28 0.00
3 2013-03-01 2013-03-31 245
4 2013-04-01 2013-04-30 529
5 2013-05-01 2013-05-31 0.00
6 2013-06-01 2013-06-30 383
7 2013-07-01 2013-07-31 0.00
8 2013-08-01 2013-08-31 0.00
我想得到输出:
2013-01-01 2013-02-28 0
2013-03-01 2013-06-30 1157
2013-07-01 2013-08-31 0
我想要得到这个结果,这样我就可以知道资金何时开始流入以及何时停止。我还对资金开始流入之前的月份数(这解释了第一行)以及资金停止的月份数感兴趣(这解释了为什么我也对 2013 年 7 月至 2013 年 8 月的第三行感兴趣)。
我知道我可以在日期上使用最小值和最大值,并在金额上使用总和,但我不知道如何以这种方式划分记录。
谢谢!
最佳答案
with CT as
(
select t1.*,
( select max(endDate)
from t
where startDate<t1.StartDate and SIGN(amount)<>SIGN(t1.Amount)
) as GroupDate
from t as t1
)
select min(StartDate) as StartDate,
max(EndDate) as EndDate,
sum(Amount) as Amount
from CT
group by GroupDate
order by StartDate
关于sql - t-sql中按日期范围分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17947584/