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 には 2011 年と 2010 年の金額があるため、2011 年の下で 1 回カウントする必要があります。アカウント 2 には 2011 年の金額しかないためカウントされませんが、アカウント 3 には 2013 年と 2012 年の金額があるため、1 としてカウントされます。 2013年未満:

 2010   2011    2012    2013                
 0      1       0       1
4

3 に答える 3

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 ay.account, ay.yr
from ay join
     ay ayprev
     on ay.account = ayprev.account and
        ay.yr = ayprev.yr + 1

次に、年ごとにアカウントの数を数えたい場合は、これを集計に入れます。

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
于 2012-08-28T00:46:30.543 に答える
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
于 2012-08-28T00:49:05.897 に答える
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)
于 2012-08-28T04:03:57.557 に答える