2017-07-28 7 views
0

私は一連のデータを持っています。最後のフィールドを作成したい - > D_Rank密集度グループ

date physician action D_Rank 
2016-01-01 Dr.John visit 1 
2016-01-01 Dr.John Call 1 
2016-01-02 Dr.John Call 1 
2016-01-03 Dr.Jane Call 2 
2016-01-04 Dr.Jane Call 2 
2016-01-05 Dr.Jane Visit 2 
2016-01-06 Dr.John NoCall 3 
2016-01-07 Dr.John NoCall 3 
2016-01-08 Dr.John Visit 3 
2016-01-08 Dr.Jane Visit 4 
2016-01-08 Dr.Jane Call 4 
2016-01-08 Dr.Joe Visit 5 
2016-01-09 Dr.Joe Call 5 

ありがとうございました。

+1

ランキングの基準は?医者の名前とその後の行動など、 – JRG

+0

日付と医者のみ。行動はランキングにとって重要ではありません。 – KOMAEI

+0

「2016-01-02 Dr.John Call 1」の行の日付が異なると、そのランクが1になるのはなぜですか?それはタイプミスですか? – BJones

答えて

1

これは、あなたが、ときphysicianの変更を決定するためにlag()ウィンドウ関数を使用し、その値を割り当て、そのような別のウィンドウ関数でそれを合計することができ2012+ dense_rank()を使用しますが、SQL Serverでされていません。

select date, physician, action 
    , change = sum(change) over (order by date, physician desc) 
from (
    select * 
    , change = case when physician = lag(t.physician) over (order by t.date, t.physician desc) then 0 else 1 end 
    from t 
) s 

rextesterデモ:http://rextester.com/MQDS34484

リターン:

+------------+-----------+--------+--------+ 
| date | physician | action | change | 
+------------+-----------+--------+--------+ 
| 2016-01-01 | Dr.John | Visit |  1 | 
| 2016-01-01 | Dr.John | Call |  1 | 
| 2016-01-02 | Dr.John | Call |  1 | 
| 2016-01-03 | Dr.Jane | Call |  2 | 
| 2016-01-04 | Dr.Jane | Call |  2 | 
| 2016-01-05 | Dr.Jane | Visit |  2 | 
| 2016-01-06 | Dr.John | NoCall |  3 | 
| 2016-01-07 | Dr.John | NoCall |  3 | 
| 2016-01-08 | Dr.John | Visit |  3 | 
| 2016-01-08 | Dr.Jane | Call |  4 | 
| 2016-01-08 | Dr.Jane | Visit |  4 | 
| 2016-01-09 | Dr.John | Visit |  5 | 
| 2016-01-09 | Dr.Jane | Call |  6 | 
| 2016-01-09 | Dr.Jane | Visit |  6 | 
+------------+-----------+--------+--------+ 

拡大サンプルダ別の医師との別の日のために。

+0

1日に医師が2人いる可能性があります。この場合、このコードは機能しません! Dr. Johnが2016-01-08にレコードを持っているとしますか? – KOMAEI

+0

@KOMAEI質問を更新して、あなたが探している結果を表示してみませんか? – SqlZim

+0

確かに。私はデータセットを変更しました。 – KOMAEI