Проблема с запросом наибольшего n в группе с отчетливым - PullRequest
0 голосов
/ 02 октября 2018

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

По какой-то причине при использовании MAX (отметка времени) возвращается только ОДИНвход пользователя, а не других пользователей.Если я удаляю МАКС (отметка времени), я возвращаюсь к возвращению всех записей, а не только одной.Если я добавлю МАКС на временную метку назад, он иногда показывает только одно изменение пользователя, иногда ни одного ... Любая помощь будет оценена

SELECT a.* 
  FROM 
     ( SELECT 
            rID
            , r.studentID
            , oldMethod
            ,newMethod
            ,oldSubMethod
            ,newSubMethod
            ,timestamp
            ,r.staffID
            ,type
            , 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.studentID = r.studentID
         LEFT 
         JOIN staffaccounts a
           ON r.staffID = a.staffID
        WHERE '$bnu' IN (newSubMethod,oldSubMethod) 
          AND DATE(timestamp) = CURRENT_DATE
     ) a
  JOIN 
     ( SELECT s.studentID
            , 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.studentID = r.studentID
         LEFT 
         JOIN staffaccounts a
           ON r.staffID = a.staffID
        WHERE '$bnu' IN (newSubMethod,oldSubMethod) 
          AND DATE(timestamp) = CURRENT_DATE
    ) b
   ON b.studentID = a.studentID
  AND b.timestamp = a.timestamp

1 Ответ

0 голосов
/ 02 октября 2018

MAX, COUNT, MIN, AVG и т. Д. - это все методы группировки в MySQL.

Как таковой и в качестве простого примера, если вы просто

SELECT username, MAX(date)
FROM table

в результате вы получите только один результат с самой последней отметкой времени.

Если вы хотите получить каждое имя пользователя с последним обновлением, вы должны сделать:

SELECT username, MAX(date)
FROM table
GROUP BY username

Таким образом, вы явно заявляете, что хотите сгруппировать выходные данные запроса и как вы хотите сгруппировать его

...