我正在使用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
答案 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年,则上述情况更好,因为它需要考虑闰年)