您好我需要在每天结束时计算不同房屋号码的结算数量,状态='AA'。
所以在2016年3月19日结束时 - 如果我们有3个不同的房子H1,H2,H3,AA计数= 3 2016年3月20日,如果我们再次获得AA记录的AA和h4,h5与AA,期末余额= 5 在2016年3月21日,如果其中2个房子离开AA,另外3个房子加入AA,计数将是= 6
有人可以帮我解决这个问题。
数据库= Netezza。
所以基本上我需要计算从时间开始到当天具有AA状态的不同房屋的数量,每天作为当天房屋的结算数量。[CLsBal是所需的推导] < / p>
ReleaseDate|HNo|Status|HType|RelReason| ValidFrm | ValidTo |ClsBal
-------------------------------------------------------------------
01-Jan-16 H1 AA R XYZ 01-Jan-16 01-Jan-16 2
01-Jan-16 H2 AA R XYZ 01-Jan-16 31/12/2999 2
02-Jan-16 H3 AA R XYZ 02-Jan-16 31/12/2999 4
02-Jan-16 H4 AA R XYZ 02-Jan-16 31/12/2999 4
02-Jan-16 H5 AA R XYZ 02-Jan-16 31/12/2999 4
02-Jan-16 H1 AB R XYZ 02-Jan-16 31/12/2999 4
03-Jan-16 H6 AA R XYZ 02-Jan-16 31/12/2999 8
03-Jan-16 H7 AA R XYZ 02-Jan-16 31/12/2999 8
03-Jan-16 H8 AA R XYZ 02-Jan-16 31/12/2999 8
03-Jan-16 H9 AA R XYZ 02-Jan-16 31/12/2999 8
03-Jan-16 H3 AA R XYZ 02-Jan-16 31/12/2999 8
以下代码是查找特定日期的期末余额的逻辑:
select cast('31-dec-2015' as date ) as RELEASEDATE,
HNo,
HType,
count(distinct Hno ) as ClosingCount
from HouseChanges
where ReleaseDate <= '31-dec-2015'
and Status='AA' -- House Status
and ValidTo >= '31-dec-2015'
group by RelReason, Htype
我需要计算2015年12月31日的每一天
我们可以使用递归CTE来解决这个问题吗?
我试过,但它一直出错,Aginity在返回错误代码方面不是很好。
我使用了这样的东西:
with closing as (
select cast('31-dec-2015' as date ) as RELEASEDATE,
HNo,
HType,
count(distinct Hno ) as ClosingCount
from HouseChanges
where ReleaseDate <= '31-dec-2015'
and
Status='AA' -- House Status
and
VALID_TO_DATE >= '31-dec-2015'
group by RelReason, Htype
union all
select max(Release_date) as RELEASEDATE,
HNo,
HType,
count(distinct Hno ) as ClosingCount
from HouseChanges t1
inner join closing t2
on t1.Release_date <= t2. RELEASEDATE++interval '1 days'
where
Status='AA' -- House Status
and
VALID_TO_DATE >= t2. RELEASEDATE+interval '1 days'
and
t2. RELEASEDATE<=current_date
group by RelReason, Htype
)
select * from closing
原来Netezza不支持递归CTE。有人可以建议我如何在不使用CTE的情况下这样做吗?
答案 0 :(得分:0)
我不完全理解您所描述的要求,但这是我的猜测。应该可以使用窗口功能,虽然我不知道你是否有这些功能:
select
ReleaseDate, HNo, HType,
(
select count(distinct hc2.Hno)
from HouseChanges hc2
where hc2.ReleaseDate <= hc.ReleaseDate
and Status = 'AA' and ValidTo >= '31-dec-2015'
) as ClosingCount
from HouseChanges hc
where Status = 'AA' and ValidTo >= '31-dec-2015'
group by ReleaseDate, HNo, HType