Php 分组并获得最后一行

Php 分组并获得最后一行,php,mysql,group-by,Php,Mysql,Group By,当我使用 SELECT * FROM reports WHERE staff='$username' GROUP BY taskid 在我的查询中,我从该组获得第一行的结果 我需要添加什么才能从该组的最后一行获得结果 最后一行表示id大于该组中的另一行 我试着加上 ORDER BY id DESC 或 但是它没有返回预期的结果。您使用的是没有任何聚合函数的group by函数。您可能希望改为执行order by(查询中没有group by): 当您希望对特定列使用聚合函数(例如获取平均行值

当我使用

SELECT * FROM reports WHERE staff='$username' GROUP BY taskid
在我的查询中,我从该组获得第一行的结果

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

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

我试着加上

ORDER BY id DESC 


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

您使用的是没有任何聚合函数的group by函数。您可能希望改为执行order by(查询中没有group by):

当您希望对特定列使用聚合函数(例如获取平均行值或求和)等时,通常使用Group By函数。如果您没有使用任何聚合函数,那么使用Group By将不起任何作用

如果只想从查询中获取一行,可以添加如下限制子句:

SELECT * FROM reports WHERE staff='$username' order BY taskid desc limit 1;
如果希望每个组的“最后”行,则需要指定定义唯一性的字段(即“第一行/最后一行”的含义),然后在子查询中隔离这些行

e、 g

这将获得每个组的最大id

SELECT taskid, max(id) as max_id FROM reports 
WHERE staff ='$username' 
GROUP BY taskid
这将获得整行:

当然,这假定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

为什么在这里使用GROUP BY?我使用GROUP BY,因为我知道它只返回一行。。。这就是我想要的:)您应该使用LIMIT子句来指定返回的行数。GROUP BY用于在您似乎不需要的组上执行函数
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
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