いくつかのデータがあり、各行に順番に番号を付けたいのですが、同じタイプの行は連続して同じ番号に番号を付け、異なるタイプの場合は番号を付け続けます。タイプは 5 と 6 のみで、ID は実際には abc123 よりも複雑です。ランクを試してみましたが、2 つの異なる行数を取得しているようです。この例では、1 2 2 3 4 ではなく、1 1 2 2 になります。
元の画像
密な順位結果
MS SQL 2008 R2
いくつかのデータがあり、各行に順番に番号を付けたいのですが、同じタイプの行は連続して同じ番号に番号を付け、異なるタイプの場合は番号を付け続けます。タイプは 5 と 6 のみで、ID は実際には abc123 よりも複雑です。ランクを試してみましたが、2 つの異なる行数を取得しているようです。この例では、1 2 2 3 4 ではなく、1 1 2 2 になります。
元の画像
密な順位結果
MS SQL 2008 R2
私が理解している限り、あなたは連続したグループに番号を付けたいと思っています
declare @Temp table (id1 bigint identity(1, 1), ID nvarchar(128), Date date, Type int)
insert into @Temp
select 'abc123', '20130101', 5 union all
select 'abc124', '20130102', 6 union all
select 'abc125', '20130103', 6 union all
select 'abc126', '20130104', 5 union all
select 'abc127', '20130105', 6 union all
select 'abc128', '20130106', 6 union all
select 'abc129', '20130107', 6 union all
select 'abc130', '20130108', 6 union all
select 'abc131', '20130109', 5
;with cte1 as (
select
*,
row_number() over (order by T.Date) - row_number() over (order by T.Type, T.Date) as grp
from @Temp as T
), cte2 as (
select *, min(Date) over (partition by grp) as grp2
from cte1
)
select
T.ID, T.Date, T.Type,
dense_rank() over (order by grp2)
from cte2 as T
order by id1