我在下面显示了一个查询,希望能够用来向用户显示最近更改的列表。记录所在的表有时每个学生可能包含多个更改,但我只想显示每个用户最近的更改。
由于某种原因,当使用MAX(timestamp)时,它仅返回一个用户条目,而不返回其他用户。如果我删除了MAX(timestamp),它可以返回所有记录,而不仅仅是返回一条记录。如果我将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
答案 0 :(得分:1)
MAX
,COUNT
,MIN
,AVG
等都是MySQL中的分组方法。
因此,作为一个简单的示例,如果您只是
SELECT username, MAX(date)
FROM table
您最终只会得到一个结果,即带有最新时间戳的结果。
如果要获取每个用户名的最新更新,则应该执行以下操作:
SELECT username, MAX(date)
FROM table
GROUP BY username
通过这种方式,您可以清楚地知道要对查询输出进行分组以及如何对其进行分组