2017-02-13 144 views
0

我正在測試複雜的數據庫規則,我需要幫助來制定邏輯以測試以下情況。從基於等級的SQL查詢結果中提取記錄

我有如下的輸出假設表名臨時

BUSINESS_KEY  STATUS_KEY CREATE_TIMESTAMP 
123    a1   1 P.M. 
123    a1   1:30 P.M. 
123    b1   2:00 P.M. 
123    a1   2:30 P.M. 

我有如下記錄拿起了上述

BUSINESS_KEY  STATUS_KEY CREATE_TIMESTAMP 
123    a1   1 P.M. 
123    b1   2:00 P.M. 
123    a1   2:30 P.M. 

我不得不放棄第二個記錄的,該規則是如果相同的status_key輸出連續的時間戳,就像上面下午1:00以上的示例那樣和下午1點30分,只有最早的時間戳記錄被選中。我被允許選擇第四條記錄,因爲它與第一條記錄不是連續的。

我試過所有的排名(),row_number,自我加入組合,但沒有奏效。任何人都可以幫忙嗎?

+0

我剛纔已經回答了類似的問題[這裏](http://stackoverflow.com/questions/42142981/how-to-group這個數據是我可以從每個組中抽出特定行/ 42145336#42145336)使用'LAG'和'ROW_NUMBER()'。我建議將TIMESTAMP作爲'DATETIME'存儲,因爲...因爲在數天內排序你的數據會讓你感到頭疼。如果時間是11:50然後是00:01怎麼辦? – scsimon

回答

0

一種方法使用lag(),另一種使用row_number()的區別。後者適用於-SQL預Server 2012的採用lag()這很簡單:

select t.* 
from (select t.*, 
      lag(status_key) over (partition by business_key order by create_timestamp) as prev_status_key 
     from t 
    ) t 
where prev_status_key is null or prev_status_key <> status_key; 
+0

這個提示爲我工作。謝謝 – Chaitanya