DATEDIFF和NULL可在过去N天内查找不完整的记录

时间:2014-03-13 14:07:43

标签: sql-server null where outer-join datediff

我正在使用DATEDIFF和IS NULL来查找特定天数内缺失数据的记录, 例如,在这里,我试图找到1095天没有上过任何课程的学生 (3年),如果他们是注册学生,他们不能参加任何课程超过3年。我认为我这样做是正确的,只是确保。正如我所知,在OUTER JOIN之后,所有列都会返回,并且您在WHERE中过滤了您不想要的列。

SELECT DISTINCT
    stu.campusID AS [Campus ID],
    camp.name AS [School],
    stu.studentID AS [Student ID],
    stu.lName AS [Last Name],
    stu.fName AS [First Name]

FROM
    students stu
    LEFT OUTER JOIN
    coursesTaken cour
    ON
    cour.campusID = stu.campusID
    AND
    cour.studentID = stu.studentID
    AND
    DATEDIFF(D, cour.dateTaken, GETDATE()) >= 1095
    INNER JOIN
    campusNames camp
    ON
    camp.campusID = stu.campusID

WHERE
    cour.dateTaken IS NULL

1 个答案:

答案 0 :(得分:2)

如果您想要找到过去3年没有参加过任何课程的学生,那么我可以改变一些事情:&/ p>

SELECT
    stu.campusID AS [Campus ID],
    camp.name AS [School],
    stu.studentID AS [Student ID],
    stu.lName AS [Last Name],
    stu.fName AS [First Name]

FROM
    students stu
      INNER JOIN
    campusNames camp
      ON
        camp.campusID = stu.campusID
WHERE
    NOT EXISTS (SELECT * FROM coursesTaken co
           where co.StudentID = stu.StudentID and
           co.DateTaken > DATEADD(year,-3,GETDATE())

希望能够更清晰/更贴近您的规范。 (您可以将DATEADD更改为使用1095天,如果这是实际要求,但如果它是3年,则上述情况更好,因为它需要考虑闰年)