2016-08-22 2 views
2

저는 Windows 플랫폼에서 cf 9를 사용하고 있습니다.검색어 출력에 누락 날짜가 있습니다.

30 일 동안 결석 한 학생들이이 출력 목록에 나타나는 SQL 문을 실행할 수 있습니다. 문제가있는 곳은 각 강사 옆에 학생의 출석 날짜를 보여주고 싶습니다. 이것은 어떻게 든 내 쿼리를 실행할 때 나타나지 않았습니다. 내가 사용하고있는 쿼리는 다음과 같습니다.

SELECT Stuid, 
     TRIM(CONCAT(name.fname,' ',name.lname)) AS OVER_30_Days, 
     ltfname AS instructor, 
     MAX(meedate) 
FROM name 
LEFT JOIN meeting 
    ON meeStuid = Stuid AND 
     meedate BETWEEN NOW() - INTERVAL 31 DAY AND NOW() 
LEFT JOIN squadlt 
    ON squadlt = ltid 
WHERE meeStuid IS NULL AND 
     type = 'pupil' AND 
     city = 'jackson' AND 
     status = 'a' AND 
     Stuid <> '432' AND 
     Stuid <> '5' AND 
     Stuid <> '183' 
ORDER BY ltfname, OVER_30_Days 

결과 목록은 maxdate 열에 null 값과 함께 표시됩니다. 내가 잘못하고있는 것이 있습니까?

Stuid  OVER_30_Days  Instructor  Max(meedate) 
445  Jerry Biden  Dr. Richards Null 
446  Kenny Gold  Dr. Sondra  Null 
444  Timothy Crim  Dr. Kumar  Null 
+0

어리석은 질문을하지만, 학생이 때 실제로'meeting' 테이블에 데이터를 기록 할 없는? 그렇지 않은 경우 다른 필터가 필요할 수 있습니다. – Leigh

답변

1

당신은 당신의 직접적인는 지난 30 일 이내에 각 학생에 대한 출석의 마지막 날짜를 찾을 수 GROUP BY 집계를 사용하는 하위 쿼리에 가입과 함께 meeting 테이블에 조인 교체 할 수 있습니다. 여기에 전체 쿼리는, 당신은 내가 행한 모든 직접 meeting로 대체하는 것을 알 수 있습니다 :

SELECT Stuid, 
     TRIM(CONCAT(name.fname,' ',name.lname)) AS OVER_30_Days, 
     ltfname AS instructor, 
     t.meedate 
FROM name 
LEFT JOIN 
(
    SELECT meeStuid, MAX(meedate) AS meedate 
    FROM meeting 
    WHERE meedate BETWEEN NOW() - INTERVAL 31 DAY AND NOW() 
    GROUP BY meeStuid 
) t 
    ON t.meeStuid = Stuid 
LEFT JOIN squadlt 
    ON squadlt = ltid 
WHERE meeStuid IS NULL AND 
     type = 'pupil' AND 
     city = 'jackson' AND 
     status = 'a' AND 
     Stuid <> '432' AND 
     Stuid <> '5' AND 
     Stuid <> '183' 
ORDER BY ltfname, OVER_30_Days 
+0

@ user1824615 - 날짜 비교를 조정해야 할 수도 있습니다. 'NOW()'에는 날짜와 시간이 모두 포함되어 있으므로 지금 비교해 보면 7 월 22 일 2216 년 14:55:49 - 8 월 22 일 2016 14:55:49 (포함) 사이의 'meedate'값을 찾습니다. 'meedate'를 저장하는 대상과 정확히 "지난 30 일"을 정의하는 방법에 따라 약간의 조정이 필요할 수 있습니다. 또한 질문과는 아무런 관련이 없지만 복수의'<> '비교보다는'NOT IN ('432 ','5 ', 183') ' – Leigh

+1

@Leigh 이것을 지적 해 주셔서 감사합니다. 나는 철자가 그것을 밖으로 시도하고 피드백을 제공 할 것입니다. –

+0

문제는 없습니다. (분명히 당신은 이미 구별에 대해 알고 있습니다 ;-)하지만 공통적 인 문제는 아내에게 언급하는 것이 아쉽지 않다고 생각했습니다.) 당신이 말했듯이, 우리는 무슨 일이 일어나는 지 보게 될 것입니다. – Leigh

관련 문제