當我用集團通過並獲得最後一行
SELECT * FROM reports WHERE staff='$username' GROUP BY taskid
我查詢
,我從該組的第一行的結果。
我需要添加什麼來獲得該組最後一行的結果?
最後一行意味着id大於該組中的另一行。
我嘗試添加
ORDER BY id DESC
或
ORDER BY id
,但它未返回預期的結果。
當我用集團通過並獲得最後一行
SELECT * FROM reports WHERE staff='$username' GROUP BY taskid
我查詢
,我從該組的第一行的結果。
我需要添加什麼來獲得該組最後一行的結果?
最後一行意味着id大於該組中的另一行。
我嘗試添加
ORDER BY id DESC
或
ORDER BY id
,但它未返回預期的結果。
您正在使用按功能分組而沒有任何聚合功能。你可能想通過代替(沒有GROUP BY查詢)做了一個命令:
SELECT * FROM reports WHERE staff='$username' order BY taskid desc;
集團通過功能,當你想使用聚合函數在一個特定的列(如得到一個平均行常用價值或總和)等。如果您沒有使用任何聚合函數,那麼使用Group By將不會執行任何操作。
如果你只是想從查詢得到一排,你可以添加一個限制條款是這樣的:
SELECT * FROM reports WHERE staff='$username' order BY taskid desc limit 1;
如果你想每組「最後」 行,那麼你需要指定哪些字段定義唯一性(即,您的意思是「第一行/最後一行」),然後將這些行隔離在子查詢中。
例如
這讓你對每個組
SELECT taskid, max(id) as max_id FROM reports
WHERE staff ='$username'
GROUP BY taskid
最大(ID),這得到了整個行(S):
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
爲什麼您使用GROUP BY在這裏? –
我用group by coz我知道它只會返回一行......而這正是我想要的:) –
您應該使用LIMIT子句來指定返回的行數。 GROUP BY用於您不需要的組上執行功能 –