1

レコードとアクティブ/非アクティブの日付のテーブルがある場合、アクティブなレコードを月ごとにカウントする簡単な方法はありますか? 例えば:

tbl_a
id        dt_active    dt_inactive
a         2013-01-01   2013-08-24
b         2013-01-01   2013-07-05
c         2012-02-01   2012-01-01

次のように月ごとにアクティブなレコードの出力を生成する必要がある場合: active: dt_active < first_day_of_month <= dt_inactive

month    count
2013-01  2
2013-02  2
2013-03  2
2013-04  2
2013-05  2
2013-06  2
2013-07  2
2013-08  1
2013-09  0

日付の一時テーブルをアップロードしてサブクエリを使用する以外に、これを行う賢い方法はありますか?

4

1 に答える 1

1

以下は、月初にアクティブ数を表示するメソッドの 1 つです。すべての月のリストを作成し、この情報を に結合しtbl_aます。

with dates as (
      select cast('2013-01-01' as date) as month
      union all
      select dateadd(month, 1, dates.month)
      from dates
      where month < cast('2013-09-01' as date)
)
select convert(varchar(7), month, 121), count(a.id)
from dates m left outer join
     tbl_a a
     on m.month between a.dt_active and a.dt_inactive
group by convert(varchar(7), month, 121)
order by 1;

注:dt_inactiveが非活動の最初の日である場合、on条項は次のようになります。

on m.month >= a.dt_active and m.month < a.dt_inactive

これは、実際のクエリを使用した SQL Fiddle です

于 2013-09-11T19:50:42.500 に答える