分组并获得最后一行

时间:2012-09-11 11:45:16

标签: php mysql group-by

当我使用

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

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

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

最后一行表示id大于该组中的另一行。

我尝试添加

ORDER BY id DESC 

ORDER BY id

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

e.g。

这可以获得每个组的最大值(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