0

当我使用

SELECT * FROM reports WHERE staff='$username' GROUP BY taskid

在我的查询中,我得到了该组第一行的结果。

我需要添加什么才能从该组的最后一行获得结果?

最后一行意味着 id 大于该组中的另一行。

我尝试添加

ORDER BY id DESC 

或者

ORDER BY id

但它没有返回预期的结果。

4

2 回答 2

1

您正在使用没有任何聚合函数的分组函数。您可能希望改为按顺序进行(查询中没有分组):

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;
于 2012-09-11T11:47:03.203 回答
0

如果您想要每个组的“最后”行,那么您需要指定哪个字段定义唯一性(即“第一行/最后一行”的意思),然后在子查询中隔离这些行。

例如

这将为您提供每个组的 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
于 2012-09-11T11:49:36.833 回答