我有一個表具有以下有序數據塊:結合連續SQL行,每隔一個,一個警告
Employee TimeX TimeY Type Date
-----------------------------------------------
1 0800 0900 'A' 1/1/2013
1 0930 1300 'B' 1/1/2013
1 0600 0845 'A' 1/2/2013
1 0925 1300 'B' 1/2/2013
1 1100 1400 'A' 1/3/2013
1 0500 0700 'A' 1/4/2013
1 0715 0800 'B' 1/4/2013
我需要的是得到一個類型的TimeY之間分鐘的計數類型B的TimeX,用於每個匹配對。由於設計超出了我的控制範圍,我無法將「A」和「B」鏈接在一起,除了時間戳之外。可悲的是,不,我不能保證類型'A'的所有行都會跟着'B'類型的行,所以任何'A'後面跟着'B'都不應該被忽略。但是,'B'不會被另一個'B'跟隨。基本上,這是我想看到的:
Employee Duration
---------------------
1 30
1 40
1 15
有沒有辦法輕鬆做到這一點?我在這裏找到的最接近的解決方案涉及加入日期,但在這種情況下這不起作用。我在下午晚些時候提出的唯一可能的解決方案過於複雜並且沒有平移。
編輯:感謝您的回覆!這是一些非常令人印象深刻的SQL爭論!我隨Marc的回答一起閱讀,因爲它是最容易閱讀的,但感謝Gordon爲Marc的回答提供了靈感,並感謝Nenad沿着我嘗試的方向努力。
有一些使用Windows函數的解決方案,如ROW_NUMBER。請稍微解釋一下行的順序。是「日期」專欄來訂購它們還是有更精確的東西?如果當天有兩種相同的類型呢? –
請同時指出您使用的是哪個版本的SQL Server。 –