2017-01-05 3 views
-3

У меня есть инструкции SUM CASE, которые работают правильно. Проблема в том, что у меня есть несколько записей с похожими критериями, поэтому я бы хотел выбрать последнюю запись по дате.MySQL SUM с CASE выбирает самую последнюю запись по дате

SELECT 
    SUM(CASE WHEN planning like 'Rotation%' THEN 1 ELSE 0 END + 
     CASE WHEN assessmentanddata like 'Collects%' THEN 1 else 0 END + 
     CASE WHEN path like 'Same%' THEN 1 else 0 END + 
     CASE WHEN place like 'Move%' THEN 1 else 0 END + 
     CASE WHEN pace like 'Timer%' THEN 1 else 0 END + 
     CASE WHEN classroommanagement like 'Restating%' THEN 1 else 0 END + 
     CASE WHEN teacherrole like 'Mini%' THEN 1 else 0 END + 
     CASE WHEN studentengagement like 'Follow%' THEN 1 else 0 END + 
     CASE WHEN studentcollaboration like 'Collects%' THEN 1 else 0 END + 
     CASE WHEN technology like 'Technology%' THEN 1 else 0 END) AS p1 
    from ruberic where schoolId = 1 

Образец из таблицы будут эти 3 колонки даты, SCHOOLID и TEACHERID:

2016-12-05 1 1 -> Эта запись будет хорошо

2016 -12-05 1 4 -> Выбрать только это по сравнению с записью ниже

2016-12-05 1 4

+1

Возможно, пустые голоса связаны с незавершенным вопросом. Нет предложения 'FROM' или' WHERE'. Основываясь на моем понимании предисловия, 'CASE' в основном является отвлечением. См., Например, http://stackoverflow.com/questions/8523374/mysql-get-most-recent-record – alttag

+0

Первое сообщение, обеспокоенное редактированием, пропустило 'from'/'where'. – JWK

+0

Работайте с ним по частям. Если ваш исходный запрос работает, добавьте «когда schoolId и teacherId совпадают» с вашим предложением WHERE. Как только вы это сделаете, проверьте (многие) другие вопросы о том, как захватить самую последнюю запись. – alttag

ответ

0

Основываясь на том, что я вижу (я не вижу названия поля для даты, так предполагаемой даты)

Это использует корреляционный подзапрос и оператор существования для определения максимального (даты) для каждого учителя и школы, а затем ограничивает основной набор данных этим подмножеством через окраску.

SELECT 
    SUM(CASE WHEN planning like 'Rotation%' THEN 1 ELSE 0 END + 
     CASE WHEN assessmentanddata like 'Collects%' THEN 1 else 0 END + 
     CASE WHEN path like 'Same%' THEN 1 else 0 END + 
     CASE WHEN place like 'Move%' THEN 1 else 0 END + 
     CASE WHEN pace like 'Timer%' THEN 1 else 0 END + 
     CASE WHEN classroommanagement like 'Restating%' THEN 1 else 0 END + 
     CASE WHEN teacherrole like 'Mini%' THEN 1 else 0 END + 
     CASE WHEN studentengagement like 'Follow%' THEN 1 else 0 END + 
     CASE WHEN studentcollaboration like 'Collects%' THEN 1 else 0 END + 
     CASE WHEN technology like 'Technology%' THEN 1 else 0 END) AS p1 
FROM 
    ruberic R1 
WHERE 
    schoolId = 1 
    AND EXISTS (SELECT Null 
       FROM ruberic r2 
       WHERE R2.SchoolID = R1.SchoolID 
        AND R2.TeacherID = R1.TeacherID 
       GROUP BY SchoolID, TeacherID 
       HAVING R1.Date = MAX(R2.Date)) 
Смежные вопросы