2012-09-11 43 views
0

當我用集團通過並獲得最後一行

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

,我從該組的第一行的結果。

我需要添加什麼來獲得該組最後一行的結果?

最後一行意味着id大於該組中的另一行。

我嘗試添加

ORDER BY id DESC 

ORDER BY id 

,但它未返回預期的結果。

+0

爲什麼您使用GROUP BY在這裏? –

+0

我用group by coz我知道它只會返回一行......而這正是我想要的:) –

+0

您應該使用LIMIT子句來指定返回的行數。 GROUP BY用於您不需要的組上執行功能 –

回答

1

您正在使用按功能分組而沒有任何聚合功能。你可能想通過代替(沒有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; 
0

如果你想每組「最後」 行,那麼你需要指定哪些字段定義唯一性(即,您的意思是「第一行/最後一行」),然後將這些行隔離在子查詢中。

例如

這讓你對每個組

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