假设我有一个看起来像这样的表:
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 =学生证号
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。
答案 0 :(得分: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)