0

次の MySQL テーブル (student_lesson_progress) があります。

  • ID
  • レッスンID
  • 学生証
  • LessonStatusTypeId
  • 記録日時
  • ...

現在の学年で、最後のステータスが 2 つの値 (6 または 13) のいずれかであった生徒の数を取得する必要があります。

私はSQLの初心者です。各 StudentId/lessonId の組み合わせの最後のレコードを取得することから始めたいと思います。次に、そのリストを自分の基準を満たすものに絞り込みます。これは私が欲しいと思うクエリですが、サブクエリの「Max」で構文エラーを引き起こします。

SELECT M1.*  
FROM student_lesson_progress M1  
{  
SELECT MAX(id) as lastRecord, lessonId, studentId, lessonStatusTypeId  
FROM student_lesson_progress  
GROUP BY studentId, lessonId  
} M2  
WHERE recordDateTime > "2012-08-01" 
AND (lessonStatusTypeId = 13 or lessonStatusTypeId = 6)  
ORDER BY studentId, lessonId, lastRecord  

計算された値を持つサブクエリの構文の例を見つけるのに苦労しています。提案?それとももっと良い方法がありますか?

4

2 に答える 2

0

M1との間の結合が欠落しているようですM2

SELECT COUNT(M1.StudentID) AS Students
FROM student_lesson_progress M1
    INNER JOIN
    (SELECT MAX(id) as lastRecord, lessonId, studentId, lessonStatusTypeId  
     FROM student_lesson_progress  
     GROUP BY studentId, lessonId) M2 ON M1.ID = M2.lastRecord -- need to join M1 and M2 together
WHERE recordDateTime > '2012-08-01'
AND (lessonStatusTypeId = 13 or lessonStatusTypeId = 6)
ORDER BY studentId, lessonId, lastRecord
于 2013-03-11T22:01:54.183 に答える
0

ID が常に増加している場合は、次のクエリを使用できます。

SELECT COUNT(*)
FROM student_lesson_progress
WHERE
  id IN (SELECT max(id)
         FROM student_lesson_progress
         GROUP BY studentId, lessonId)
  AND recordDateTime > '2012-08-01'
  AND lessonStatusTypeId IN (13, 6)
于 2013-03-11T22:11:55.823 に答える