2013-04-15 37 views
-1

我有一個表格,列出了考生的培訓課程的開始和結束日期,並且需要通過表格檢查候選人以前的記錄結束日期是否在他們當前的記錄開始日期之前。在表格中移動

換句話說,我需要檢查一個候選人培訓記錄不重疊,如果他們這樣做,我需要能夠將壞記錄發送到另一個表。

我在這裏添加了一個示例,其中所有日期都不正確,因爲所有結束日期都在下一個記錄開始日期之後。

我試過while循環和遊標,但我不能看到一種方法來存儲從一個記錄的值,而移動到下一個爲了比較它。 謝謝。

PERS_ID PERS_TYPE_SD PERS_TYPE_ED 
6444 2006-08-01 00:00:00.000 2018-07-29 00:00:00.000 
6444 2009-08-01 00:00:00.000 2012-07-31 00:00:00.000 
6444 2007-08-01 00:00:00.000 2009-07-31 00:00:00.000 

回答

1
select t1.*, t2.* 
from table as t1 
join table as t2 
    on t2.PERS_TYPE_SD > t1.PERS_TYPE_SD 
and t2.PERS_TYPE_SD < t1.PERS_TYPE_ED 
and t1.PERS_ID < t2.PERS_ID 
order by t1.PERS_ID, t2.PERS_ID 
+1

@JulesII:注意使用的溶液中的自聯接上面,代替光標。理解這種技術是理解如何利用SQL的真正威力的核心概念。如果你想真正成爲SQL的勝任者,那麼你就可以放棄對遊標的所有想法,從你的詞彙表中「移動桌面」,甚至是你的夢想和噩夢。 –

+0

@PieterGeerkens注意SO的協議和+1你尊重的答案。真的,如果你的評論的唯一目的是要告誡OP,那麼評論問題不是答案。 – Paparazzi

+1

你的回答很有用,所以我提出了它;感謝你注意到我粗心的疏忽。然而,我的評論的目的是擴展你的答案,以協助OP在SQL知識中的發展。無論是對還是錯,我都不覺得對編輯作出這樣的補充。如果您發現我評論的任何部分都有價值,請隨時將其納入自己的內容中,或不要。 –