Получение только последней отметки времени MYSQL - PullRequest
0 голосов
/ 02 октября 2018

У меня есть запрос, который извлекает данные для отчета.В настоящее время он извлекает все записи, но меня попросили сделать так, чтобы он извлекал только последнюю запись из таблицы changeReport для каждого идентификатора sID

    select *, old.methodName as oldName, new.methodName as newName, students.firstName as fName, students.lastName as lName
from changeReport 
left join methodLookup as old on (old.methodID = changeReport.oldMethod) 
left join methodLookup as new on (new.methodID = changeReport.newMethod) 
join students on (students.studentID = changeReport.studentID) 
left join staffaccounts on (changeReport.staffID = staffaccounts.staffID) 
where 31 IN (newSubMethod,oldSubMethod) AND date(timestamp) = CURRENT_DATE

. Как получить тот же отчет, но показать толькопоследняя отметка времени только для каждого sID?каждый sID может содержать от 1 до 10 записей в день ... но я бы хотел получить только последний.

Я пытался сослаться на несколько других сообщений "наибольшие n для группы", но не могупохоже, что решение этой конкретной проблемы найдено.

Тип сервера: MariaDB Версия сервера: 5.5.60-MariaDB - Версия протокола сервера MariaDB: 10

1 Ответ

0 голосов
/ 02 октября 2018
SELECT a.* 
  FROM 
     ( SELECT *
            , o.methodName oldName
            , n.methodName newName
            , s.firstName fName
            , s.lastName lName 
         FROM changeReport r
         LEFT 
         JOIN methodLookup o
           ON o.methodID = r.oldMethod
         LEFT 
         JOIN methodLookup n
           ON n.methodID = r.newMethod
         JOIN s s
           ON s.sID = r.studentID
         LEFT 
         JOIN staffaccounts a
           ON r.staffID = a.staffID
        WHERE 31 IN (newSubMethodm,oldSubMethod) 
          AND DATE(timestamp) = CURRENT_DATE
     ) a
  JOIN 
     ( SELECT s.sid
            , MAX(timestamp) timestamp
         FROM changeReport r
         LEFT 
         JOIN methodLookup o
           ON o.methodID = r.oldMethod
         LEFT 
         JOIN methodLookup n
           ON n.methodID = r.newMethod
         JOIN s s
           ON s.sID = r.studentID
         LEFT 
         JOIN staffaccounts a
           ON r.staffID = a.staffID
        WHERE 31 IN (newSubMethodm,oldSubMethod) 
          AND DATE(timestamp) = CURRENT_DATE
        GROUP
           BY s.sid 
    ) b
   ON b.sid = a.sid
  AND b.timestamp = a.timestamp;
...