sql在每天结束时关闭不同的计数

时间:2016-03-21 12:54:20

标签: sql netezza

您好我需要在每天结束时计算不同房屋号码的结算数量,状态='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的情况下这样做吗?

1 个答案:

答案 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