我有带COURSEDATE专栏的学生桌。我想找出参加下一堂课的新生。
以下是我所做的:
SELECT COUNT(*)
FROM STUDENTS
WHERE TO_DATE(COURSEDATE ,'DD-MON-YY') BETWEEN TO_DATE('01-JUL-14','DD-MON-YY') AND TO_DATE('10-JUL-14','DD-MON-YY');返回:10 462
SELECT COUNT(*)
FROM STUDENTS
WHERE TO_DATE(COURSEDATE ,'DD-MON-YY') BETWEEN TO_DATE('11-JUL-14','DD-MON-YY') AND TO_DATE('20-JUL-14','DD-MON-YY');返回:10 989
我想要做的是将10,989-10,462=527学生之间的差异过滤成一个不同的结果集。
我该怎么做?
发布于 2014-11-13 15:57:00
这就是您所要求的("10,989-10,462=527"):
SELECT sum(case when TO_DATE(COURSEDATE ,'DD-MON-YY') >= TO_DATE('11-JUL-14','DD-MON-YY') then 1 else 0 end)
- sum(case when TO_DATE(COURSEDATE ,'DD-MON-YY') < TO_DATE('11-JUL-14','DD-MON-YY') then 1 else 0 end)
FROM STUDENTS
WHERE TO_DATE(COURSEDATE ,'DD-MON-YY') BETWEEN TO_DATE('01-JUL-14','DD-MON-YY') AND TO_DATE('20-JUL-14','DD-MON-YY');这是没有参加第一门课程的学生人数:
SELECT count(distinct s1.student_id)
FROM STUDENTS s1
WHERE TO_DATE(s1.COURSEDATE ,'DD-MON-YY') BETWEEN TO_DATE('11-JUL-14','DD-MON-YY')
AND TO_DATE('20-JUL-14','DD-MON-YY')
AND NOT EXISTS (SELECT 1 FROM STUDENTS s2
WHERE s2.student_id = s1.student_id
AND DATE(s2.COURSEDATE ,'DD-MON-YY') BETWEEN TO_DATE('01-JUL-14','DD-MON-YY')
AND TO_DATE('10-JUL-14','DD-MON-YY'));https://stackoverflow.com/questions/26912692
复制相似问题