2015-11-05 74 views
0

比方說,我有一個表,看起來像這樣:分組跨領域日期在SQL

STUD_ID TEST_REG_DATE TEST_CONF_DATE TEST_TAKEN_DATE 
------------------------------------------------------------- 
1   02/01/2014  03/01/2015  05/01/2015 
1   01/01/2015  03/01/2015  05/01/2015 
2   05/01/2014  07/01/2014  10/01/2015 
2   05/01/2014  08/01/2015  10/01/2015 
2   04/01/2015  07/01/2014  10/01/2015 
2   04/01/2015  08/01/2015  10/01/2015 

STUD_ID =學生ID
TEST_REG_DATE =考試報名日期
TEST_CONF_DATE =測試確認日期
TEST_TAKEN_DATE =考試日期

基本上這張表應該顯示學生,學生註冊考試的日期,學生確認註冊的日期以及學生的日期實際上接受了測試。如表中所示,每個學生有兩個考試註冊日期。我希望能夠看到學生是否完成了每個考試註冊日期的整個註冊過程。那麼基本上,他們是否在他們的記錄中附加了另一個測試註冊日期之前完成了流程?結果表將理想是這樣的:

STUD_ID TEST_REG_DATE TEST_CONF_DATE TEST_TAKEN_DATE COMPLETE 
------------------------------------------------------------------------- 
1   02/01/2014  NULL    NULL    0 
1   01/01/2015  03/01/2015  05/01/2015  1 
2   05/01/2014  07/01/2014  NULL    0 
2   04/01/2015  08/01/2015  10/01/2015  1 

我不知道該怎麼組跨領域以這種方式日期,或者如果它甚至有可能。我正在使用Netezza。

+1

您的樣品數據會生成結果嗎?我不明白爲什麼'stud = 1 date 02/01/2014'爲空。此外,爲什麼'stud = 1'只有兩個空值和'stud = 2'C你解釋一些規則,你在檢查什麼? –

+0

「結果」表是我想要生成的,而不是實際生成的。我甚至不知道是否有可能生成它。 基本上,我希望每個測試註冊日期只與未來註冊日期之後未來的確認和測試相關聯。因此,對於學生1,他們的註冊日期爲2014年2月1日和2015年1月1日。由於該學生的確認日期和考試日期均在2015年1月1日之後,因此我不希望這些日期與02/01/2014記錄相關聯。 – user3642531

+0

對於學生2,第一個確認日期在第一個註冊日期之後但在第二個註冊日期之前,因此對於05/01/2014記錄,TEST_CONF_DATE不爲空。對不起,我知道這很混亂,但我希望這個解釋有幫助。 – user3642531

回答

0

您的工作流程似乎暗示在設置test_taken_date時,該過程已成功完成。在這種情況下,答案是很容易的(我認爲你缺少一個爲test_id或COURSE_ID):

SELECT 
    t.*, 
    CASE WHEN t.test_taken_date IS NULL THEN 0 
    ELSE 1 
    END complete 
FROM 
    table t 
; 

或者在where子句的形式,只與沒有未完成的測試,返回學生ID:

WHERE NOT EXISTS(SELECT * FROM table WHERE stud_id = t.stud_id AND test_taken_date IS NULL)