7

私はテーブルを持っています。

prod、change、日付
pr1、「はい」、2012-01-01
pr1、「いいえ」、2012-02-01
pr1、「いいえ」、2012-03-01
pr1、「はい」、2012-04-01
pr1 、「はい」、2012-05-01
pr1、「いいえ」、2012-06-01

行に番号を付けるために、qry を作成し、row_number() 関数を使用しようとしています。変更列の値が yes になるたびに、row_number() をリセットする必要があります。次に、row_number() の計算を最初から開始する必要があります。このような

prod, change, date, row_number
pr1, 'Yes', 2012-01-01, 1
pr1, 'No' , 2012-02-01, 2
pr1, 'No' , 2012-03-01, 3
pr1, 'Yes '、2012-04-01、1 pr1、'はい'、2012-05-01、1 pr1 、'いいえ'、2012-06-01、2 ... など


SQLのみを使用してそのようなことを行う可能性はありますか? row_number() over (order by date, prd_prod, change) のようなウィンドウ関数を見ていましたが、そのようには機能しません。他のオプションはありますか?

4

3 に答える 3

2

行番号をリセットするには、「PARTITION BY」を追加する必要があります

前:

select RowOrder=ROW_NUMBER() OVER (ORDER BY WidgetTimeCreated)

後:

select RowOrder=ROW_NUMBER() OVER (PARTITION BY WidgetType ORDER BY WidgetTimeCreated)
于 2015-04-20T15:14:51.123 に答える
1

試す:

with yes as
(select y.*, row_number() over (partition by prod order by date) yesn
 from mytable y
 where change = 'Yes'),
yesrange as
(select c.*, n.[date] next_date
 from yes c
 left join yes n on c.prod = n.prod and c.yesn+1 = n.yesn)
select m.*, row_number() over (partition by m.prod, r.yesn order by m.date)
from mytable m
join yesrange r 
  on m.prod = r.prod and 
     m.[date] >= r.date and
     m.[date] < coalesce(r.next_date, dateadd(d, 1, m.[date]) )

(SQLFiddleはこちら)

于 2013-04-09T12:48:06.757 に答える