前の行の列の値に変化がない場合、1つの行から値を繰り返そうとしています。前もって感謝します!
create table #results (
[Floor] varchar(20)
,Room varchar(20)
,CheckInTime datetime
)
INSERT INTO #results
VALUES
('Floor1','Room1','2020-01-01 12:00:00'),
('Floor1','Room2','2020-01-05 19:00:00'),
('Floor1','Room3','2020-01-20 08:02:00'),
('Floor2','Room1','2020-01-23 19:32:00'),
('Floor1','Room1','2020-02-01 20:00:00')
そして私が探している期待される結果は
「WantedValue」列にあります。したがって、Floorがその前の行と同じである場合は、前の行のCheckInTime値を使用します。ただし、これは潜在的に複数の行を引き継ぐ必要があります。
フロアが変わるたびに最低日時が欲しいので、質問を解釈しています。
使用lag()
して、累積合計がグループを定義します。次に、ウィンドウ関数を使用して最小値を「拡散」します。
select r.*,
min(checkintime) over (partition by grp order by checkintime) as wantedvalue
from (select r.*,
sum(case when prev_floor = floor then 0 else 1 end) over (order by checkintime) as grp
from (select r.*,
lag(floor) over (order by checkintime) as prev_floor
from results r
) r
) r
order by checkintime;
これがdb <>フィドルです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加