0

私が使用したとき、

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

私のクエリでは、そのグループの最初の行の結果が得られます。

そのグループの最後の行から結果を取得するには、何を追加する必要がありますか?

最後の行は、そのグループの他の行よりも大きい id を持つことを意味します。

追加してみました

ORDER BY id DESC 

また

ORDER BY id

しかし、意図した結果は返されませんでした。

4

2 に答える 2

1

集計関数なしで group by 関数を使用しています。おそらく、代わりに order by を実行する必要があります (クエリに group by はありません):

SELECT * FROM reports WHERE staff='$username' order BY taskid desc;

Group By 関数は、特定の列で集計関数を使用する場合 (行の平均値や合計を取得する場合など) などによく使用されます。集計関数を使用していない場合、Group By を使用しても何も起こりません。

クエリから 1 行だけ取​​得したい場合は、次のような limit 句を追加できます。

SELECT * FROM reports WHERE staff='$username' order BY taskid desc limit 1;
于 2012-09-11T11:47:03.203 に答える
0

グループごとに「最後の」行が必要な場合は、一意性を定義するフィールド(つまり、「最初/最後の行」の意味)を指定してから、サブクエリでそれらの行を分離する必要があります。

例えば

これにより、各グループのmax(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
于 2012-09-11T11:49:36.833 に答える