Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中跨字段分组日期_Sql_Netezza - Fatal编程技术网

在SQL中跨字段分组日期

在SQL中跨字段分组日期,sql,netezza,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

假设我有一张这样的桌子:

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   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
学生证=学生证 测试注册日期=测试注册日期 测试确认日期=测试确认日期 测试日期=测试日期

所以基本上,这个表格应该显示学生,学生注册考试的日期,学生确认注册的日期,以及学生实际参加考试的日期。如表所示,每个学生有两个考试注册日期。我希望能够看到学生是否完成了每个考试注册日期的整个注册过程。那么,基本上,他们是否在记录附加另一个测试注册日期之前完成了该过程?理想情况下,生成的表如下所示:

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   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。

您的工作流程似乎意味着,当设置了测试日期时,流程就成功完成了。在这种情况下,答案很简单,我认为您缺少考试id或课程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)

您的样本数据会生成该结果吗?我不明白为什么2014年1月2日的stud=1为空。还有为什么stud=1有两个空值,而stud=2只有1你能解释一下规则吗?你在检查什么?结果表是我想要生成的,而不是实际生成的。我甚至不知道是否有可能生成它。基本上,我希望每个考试注册日期只与将来的确认日期和考试日期相关联,而不是在将来的注册日期之后。学生1的注册日期为2014年1月2日和2015年1月1日。由于该学生的确认日期和考试日期均在2015年1月1日之后,我不希望这些日期与2014年1月2日的记录相关联。对于学生2,第一次确认日期在第一次注册日期之后但在第二次注册日期之前,因此2014年1月5日的记录的考试确认日期不为空。抱歉,我知道这让人困惑,但我希望这个解释能有所帮助。对于stud=2,您的期望结果不应该有4行?我不希望这样,不,因为理想情况下,每个注册日期我只希望有一行。尽管说实话,这里最重要的是标记是否完整。如果该字段反映了理想结果表中显示的内容,那么其他字段的结构就没有那么重要了。但就像我说的,我甚至不知道这是否可能。