问题,每个具有不同

lfapxunr  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(205)

我有一个查询如下所示,我想能够使用它来显示一个用户最近更改的列表。记录所在的表有时可以包含每个学生的多个更改,但我只想为每个用户显示最新的更改。
出于某种原因,当使用max(timestamp)时,它只返回一个用户条目,而不返回其他用户。如果我去掉max(时间戳),它会返回所有记录,而不仅仅是一个记录。如果我在时间戳上加上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
bqjvbblv

bqjvbblv1#

MAX , COUNT , MIN , AVG 等都是mysql中的分组方法。
作为一个简单的例子,如果你

SELECT username, MAX(date)
FROM table

您将只得到一个结果,即具有最新时间戳的结果。
如果要获取每个用户名的最新更新,应执行以下操作:

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

这样,您就明确表示希望对查询输出进行分组,以及希望如何对其进行分组

相关问题