2016-09-30 25 views
0

最新のInspection_dateOccupancyと最後のものが等しくない場合の結果を得る方法を探しています。 OrderID 202 =「占有」のOrderID 201 =ためOccupancy「空き」<>Occupancyへ:この例ではTSQL:条件付きクエリ

数だけRoomID 2ため、結果だけであろう。

私はクエリの開始点を持っていますが、クエリを終了するための良いロジックが見つからないようです。 SQL Serverの2012+では

| RoomID | OrderID | Occupancy | rn | 
+--------+---------+-----------+----+ 
| 01  | 101  | Vacant | 1 | 
| 01  | 102  | Vacant | 2 | 
| 01  | 103  | Occupied | 3 | 
| 01  | 104  | Vacant | 4 | 
| 02  | 201  | Vacant | 1 | 
| 02  | 202  | Occupied | 2 | 
| 02  | 203  | Vacant | 3 | 
| 03  | 301  | Occupied | 1 | 
| 03  | 302  | Occupied | 2 | 
| 03  | 303  | Occupied | 3 | 
| 03  | 304  | Occupied | 4 | 
| 04  | 401  | Occupied | 1 | 
| 04  | 402  | Occupied | 2 | 
| 04  | 403  | Vacant | 3 | 
| 04  | 404  | Occupied | 4 | 


SELECT i.room_number, order_number, Occupancy , row_number() OVER(PARTITION BY room_number ORDER BY Inspection_date DESC) rn 
FROM #inspection_data i 

答えて

1

、あなたはlag()を使用することができますので、このような何か:

SELECT i.* 
FROM (SELECT i.room_number, order_number, Occupancy , 
      ROW_NUMER() OVER (PARTITION BY room_number ORDER BY Inspection_date DESC) as seqnum, 
      LAG(Occupancy) OVER (PARTITION BY room_number ORDER BY Inspection_date) as prev_Occupancy 
     FROM #inspection_data i 
    ) i 
WHERE prev_Occupancy <> Occupancy AND seqnum = 1 ; 
+0

完璧ではありがとうございました! –