2012-01-27 142 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行。即我想要的答案是ID = 6

我试着用下面的查询

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;