2

私は次のことに苦労しています:

Counter --- Period ---
 1         2012-02-09 
 1         2012-02-09 
 1         2012-02-08 
 2         2012-02-07 
 2         2012-02-07
 2         2012-02-07 
 3         2012-02-06
 3         2012-02-06

どの関数を使用すればよいのか、テーブルの期間行を 3 で割ってカウントを追加するカウンター列を追加する方法がわかりません。できるまで分割し、残りの行を次のカウンターとして割り当てます (上記のように)。上記の例では、@n は 3 であるため、3 つが完了するまで 1 を割り当てる各期間をカウントし、カウンターします。

n 個のグループに分割するだけで機能しない NTILE を見てきました。

助けていただければ幸いです。

4

2 に答える 2

1

質問を明確にする必要がある可能性があります。を使用するNTILE()と、探している結果が得られます (ID を含める場合):

declare @tableA table(id int identity, col1 date)

insert into @tableA values ('2012-02-09')
insert into @tableA values ('2012-02-09')
insert into @tableA values ('2012-02-08')
insert into @tableA values ('2012-02-07')
insert into @tableA values ('2012-02-07')
insert into @tableA values ('2012-02-07')
insert into @tableA values ('2012-02-06')
insert into @tableA values ('2012-02-06')

select ntile(3) over (order by id) counter, col1 Period from @tableA

結果:

counter              Period
-------------------- ----------
1                    2012-02-09
1                    2012-02-09
1                    2012-02-08
2                    2012-02-07
2                    2012-02-07
2                    2012-02-07
3                    2012-02-06
3                    2012-02-06
于 2013-03-20T19:41:07.580 に答える
1

次のようなものを探していますか?

declare @n as int = 3

SELECT
((ROW_NUMBER() over (order by period desc) - 1) / @n) + 1 as counter,
[period]
FROM [a].[dbo].[a]
于 2013-03-20T20:08:19.120 に答える