分组跨领域日期在SQL
问题描述:
比方说,我有一个表,看起来像这样:分组跨领域日期在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。
答
您的工作流程似乎暗示在设置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)
您的样品数据会生成结果吗?我不明白为什么'stud = 1 date 02/01/2014'为空。此外,为什么'stud = 1'只有两个空值和'stud = 2'C你解释一些规则,你在检查什么? –
“结果”表是我想要生成的,而不是实际生成的。我甚至不知道是否有可能生成它。 基本上,我希望每个测试注册日期只与未来注册日期之后未来的确认和测试相关联。因此,对于学生1,他们的注册日期为2014年2月1日和2015年1月1日。由于该学生的确认日期和考试日期均在2015年1月1日之后,因此我不希望这些日期与02/01/2014记录相关联。 – user3642531
对于学生2,第一个确认日期在第一个注册日期之后但在第二个注册日期之前,因此对于05/01/2014记录,TEST_CONF_DATE不为空。对不起,我知道这很混乱,但我希望这个解释有帮助。 – user3642531