2016-03-21 17 views
-1

Merhaba Her günün sonunda durum = 'AA' olan farklı Ev Numaralarının kapanış sayılarını hesaplama gereği var.sql her günün sonunda farklı sayıları kapatıyor

Günün sonunda 19/03/2016 - eğer 3 ayrı evimiz var H1, H2, H3, AA sayısı = 3 20/03/2016 tarihinde, AA ile tekrar H2 kaydımız varsa, ve h4 , AA ile h5, kapanış dengesi = 5 21/03/2016 tarihinde evlerin 2 AA dışına taşınırsa ve başka bir 3 AA'ya eklenirse, sayı = 6 olacak

Birisi bana yardım edebilir misiniz Bunu çözmek için sql.

Veritabanı = Netezza.

Temel olarak, zamanın başlangıcından o güne kadar olan ve AA için statüsüne sahip olan, her gün için her gün için Evlerin Kapanış sayısı olarak farklı Evlerin sayısını saymam gerekiyor. [CLsBal, türetme gerekli]

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 

aşağıdaki kod belirli bir gün için kapanış Denge bulmak için mantık edilir: Buna ihtiyacım

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 

31-Aralık-2015

gelen her günü için hesaplanacak

Bunu çözmek için özyinelemeli bir CTE kullanabilir miyiz?

Denedim ama hata yapmaya devam ediyor ve Aginity hata kodlarını döndürmede çok iyi değil.

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'nın reccursive IGK'ya desteklemiyor çıkıyor:

Bunun gibi bir şey kullandı. Birisi bir CTE kullanmadan bunu yapmayı nasıl başarabilirim?

+0

Verilerinizin nasıl göründüğünü ekler misiniz? –

+0

Okul/ev işi veya iş gereksinimi? – jarlh

+0

Ne tür bir veritabanı: SQL-sunucu, MySQL, PostgreSQL, Oracle, vb? Şimdiye kadar ne denedin? Nerede kaldın? –

cevap

0

Tanımladığınız gereksinimleri tam olarak anlamadım ama burada benim tahminim. Kullanabileceğimiz bir pencere işlevi kullanmak mümkün olsa da, şu özellikleri kullanmam mümkün değil:

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