当我使用
时SELECT * FROM reports WHERE staff='$username' GROUP BY taskid
在我的查询中,我得到该组第一行的结果。
我需要添加什么才能从该组的最后一行获取结果?
最后一行表示id大于该组中的另一行。
我尝试添加
ORDER BY id DESC
或
ORDER BY id
但它没有返回预期的结果。
答案 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