2012-08-28 2 views
1
ACCOUNT Amount  DATE 
1  50  01-2010 
1  100  03-2010 
1  100  02-2011 
2  100  01-2011 
2  50  05-2011 
2  50  09-2011 
3  100  03-2012 
3  100  03-2013 

현재 및 지난 1 년 동안 겹쳐진 별개 계정을 계산할 수있는 쿼리 구조가 있습니까? 예를 들어, 계정 1에는 2011 년과 2010 년에 금액이 있으므로 2011 년에 한 번 계산해야합니다. 계정 2에만 2011 년에 금액이 있으므로 계정 3에 2013 년과 2012 년 금액이있는 동안 계산되지 않으므로 1로 계산됩니다 2013 아래 :여러 기간에 걸쳐있는 계산 레코드

2010 2011 2012 2013     
0  1  0  1 

답변

1

첫째, 당신은 당신이 계정에 대한 데이터를 가지고있는 년을 알아야합니다

select account, year(date) as yr 
from t 
group by account, year(date) 

다음, 당신은 2 년 순서에 있는지 확인해야합니다. 지연/리드로 2012 년에이 작업을 수행 할 수 있습니다. 대신에, 우리가 자기를 사용할 것이다 가입 : 당신은이 가정

with ay as (
    select account, year(date) as yr 
    from t 
    group by account, year(date) 
    ) 
select yr, count(*) as numaccounts 
from (select ay.account, ay.yr 
     from ay join 
      ay ayprev 
      on ay.account = ayprev.account and 
       ay.yr = ayprev.yr + 1 
    ) ayy 
group by yr 
1

: 당신은 연도 별 계정의 수를 계산하려면

with ay as (
    select account, year(date) as yr 
    from t 
    group by account, year(date) 
    ) 
select ay.account, ay.yr 
from ay join 
    ay ayprev 
    on ay.account = ayprev.account and 
     ay.yr = ayprev.yr + 1 

다음, 그냥 집계에이를 넣어 레코드 ID (이 ID 전화) 쿼리 아래

SELECT COUNT(*),Year FROM Table t3 
INNER JOIN (
    SELECT record_id, Year(t1.Date) as Year FROM Table t1 
    INNER JOIN Table t2 
    WHERE Year(t1.Date)-1=Year(t2.Date) AND t1.Account == t2.Account 
) x ON x.record_id = t3.record_id 
GROUP BY Year 
0

사용 :

SELECT YEAR(T1.Date) AS D, COUNT(*) AS C 
FROM YourTable AS T1 
INNER JOIN YourTable T2 ON T2.Account = T1.Account AND YEAR(T2)=YEAR(T1)+1 
GROUP BY T1.Account, YEAR(T1.Date) 
관련 문제