当我使用
SELECT * FROM reports WHERE staff='$username' GROUP BY taskid
在我的查询中,我得到了该组第一行的结果。
我需要添加什么才能从该组的最后一行获得结果?
最后一行意味着 id 大于该组中的另一行。
我尝试添加
ORDER BY id DESC
或者
ORDER BY id
但它没有返回预期的结果。
您正在使用没有任何聚合函数的分组函数。您可能希望改为按顺序进行(查询中没有分组):
SELECT * FROM reports WHERE staff='$username' order BY taskid desc;
当您想对特定列使用聚合函数(例如获取平均行值或总和)等时,通常使用 Group By 函数。如果您不使用任何聚合函数,则使用 Group By 不会做任何事情。
如果您只想从查询中获取一行,则可以添加一个限制子句,如下所示:
SELECT * FROM reports WHERE staff='$username' order BY taskid desc limit 1;
如果您想要每个组的“最后”行,那么您需要指定哪个字段定义唯一性(即“第一行/最后一行”的意思),然后在子查询中隔离这些行。
例如
这将为您提供每个组的 max(id)
SELECT taskid, max(id) as max_id FROM reports
WHERE staff ='$username'
GROUP BY taskid
这将获得整行:
select * from reports where id
in
(
SELECT max(id) as max_id FROM reports
WHERE staff='$username'
GROUP BY taskid
) x
这当然假设 id 是唯一的并按升序分配,因此 max(id) 表示每组的最后一行。
或者,您可以使用连接重写它:
select * from reports r
inner join
(
SELECT max(id) as max_id FROM reports
WHERE staff='$username'
GROUP BY taskid
) x
on r.id = x.max_id