在SQL中跨字段分组日期

时间:2015-11-05 14:37:53

标签: sql netezza

假设我有一个看起来像这样的表:

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。

1 个答案:

答案 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)