2012-01-27 12 views
1

私はテーブルからデータを取得する必要があるクエリを記述する必要があります。mysql関連のクエリ

Table 
=================================== 
ID | userID | Status | date | 
=================================== 
1  3333  Queued xxxx 
2  4444  Queued yyyy 
3  5555  Finished zzzzz 
5  6666  Queued iiiii 
6  7777  Queued kkkkk 

は、今私は、ステータス=「キュー」と、ステータス=「キュー」と行が2つ以上ある場合にのみ、行と最新のIDを持つ行を取得したいです。つまり、私は答えは= 6

IDになりたい私はあなたがそのためにサブクエリを使用することができ、以下のクエリ

select * from t1 where status = "Queued" GROUP BY status HAVING count(status) > 2 ORDER BY ID DESC limit 1 

答えて

5

てみました。問題は、順序付けがグループ化の前に行われることです。このような何かが動作するはずです:

select * from t1 where ID = (select max(id) from t1 where status = "Queued" group by status having count(status) > 2) 
0

を次のクエリでは、それを解決する必要があります

select * from t1 
where id = (select max(id) from t1 where Status = 'Queued' group by Status having count(1)>2); 
0

この変形も可能である -

SELECT * FROM (
    SELECT * FROM t1 WHERE status = 'Queued' ORDER BY ID DESC) t 
GROUP BY status HAVING count(status) > 2;