2014-04-20 43 views
0

我如何爲下面的查詢編寫查詢。持續資格日期的SQL查詢

我有一個像

id eff date term date 
C 20000101 20050228 
C 20000501 20120229 
C 20060101 20120301 

我需要檢查的連續資格數據,如果連續我需要擺脫的其他記錄。對於上面的例子中我需要的輸出作爲

id Eff date Term date 
C 20000101 20120301 

我需要刪除ranges.In上面的例子中我有資格的重疊範圍內的重疊。如果我有另一個輸入記錄(第四個)說C 20130101 20130531那麼我的輸出應該是兩個記錄。 ç20000010 20120301和C 20130101 20130531

+0

你是什麼意思與「連續資格」?爲什麼只選擇那一行?請擴大您的請求。 – ericpap

+0

我需要刪除重疊的範圍。在上面的例子中,我有重疊範圍的資格。如果我有另一個輸入記錄(第四個)說C 20130101 20130531那麼我的輸出應該是兩個記錄。 C 20000010 20120301和C 20130101 20130531 – user3539875

回答

0

我不知道關於連續資格的業務規則 - 但不知道眼前這個將做到這一點:

SELECT id, min(Eff_date), max(Term_date) 
FROM my_table 
GROUP BY id 
+0

我需要刪除重疊範圍。在上面的示例中,我具有重疊範圍的資格。如果我有另一個輸入記錄(第四個)說C 20130101 20130531那麼我的輸出應該是兩個記錄。 C 20000101 20120301和C 20130101 20130531 – user3539875

+0

這可以在SQL中完成,但我認爲需要分析函數,例如LAG,以便我們可以訪問前一行。你的DBMS是否支持分析功能?或者,我的意願是在程序上做到這一點。您使用哪種語言或環境運行此查詢? –