2011-06-07 98 views
1

我的表strucutre如下SQL组查询通过,并限制

| id | cmp  | empid | empname | ttm 
+------+----------+-------+---------+------ 
| 2 | xyz  | 12 | swap | 2 
| 2 | xyz  | 12 | sag  | 3 
| 2 | xyz  | 14 | azr  | 1 
| 3 | pqr  | 2  | ron  | 2 
| 3 | pqr  | 22 | rah  | 1 
| 3 | pqr  | 32 | pra  | 5 

我已经做查询上,像如下

(select * from test.companies where id = '2' order by ttm desc limit 2) 
union 
(select * from test.companies where id = '3' order by ttm desc limit 2); 

它如下

| id | cmp  | empid | empname | ttm 
+------+----------+-------+---------+------ 
| 2 | wissen | 12 | sag  | 3 
| 2 | wissen | 12 | swap | 2 
| 3 | prolinkd | 32 | pra  | 5 
| 3 | prolinkd | 2  | ron  | 2 
会给输出

但我想输出如下

该公司拥有最大TTM 10只
| id | cmp  | empid | empname | ttm 
+------+----------+-------+---------+------ 
| 3 | prolinkd | 32 | pra  | 5 
| 3 | prolinkd | 2  | ron  | 2 
| 2 | wissen | 12 | sag  | 3 
| 2 | wissen | 12 | swap | 2 

意味着它会显示在第一

如果某些人知道PLZ回复

感谢

回答

2

看起来丑陋,丑陋,但它应该做你想做的。它会为每个公司的每个记录检索“maxttm”,然后在分类中使用它来允许您根据最高ttm为公司分配优先级。

SELECT * FROM (
    (SELECT *, 
     (SELECT ttm FROM test.companies ic WHERE ic.id = oc.id ORDER BY ttm DESC LIMIT 1) AS maxttm 
     FROM test.companies oc WHERE id = '2' ORDER BY ttm DESC LIMIT 2) 
    UNION 
    (SELECT *, 
     (SELECT ttm FROM test.companies ic WHERE ic.id = oc.id ORDER BY ttm DESC LIMIT 1) AS maxttm 
     FROM test.companies oc WHERE id = '3' ORDER BY ttm DESC LIMIT 2) 
) AS myunion ORDER BY maxttm, id; 

PS。感谢inti的无耻基于此的查询。

+0

感谢上面的查询确实帮助完全为我再次感谢。 – 2011-06-07 09:56:30

0
select * 
from test.companies 
where id in ('2','3') 
and ttm > 1 
order by ttm desc, id 
+0

根据示例数据,我不认为这会匹配。看起来他希望所有具有较高TTM值的公司的记录(例如,公司#3具有最高的TTM,因此公司#3的所有记录都是第一位)。同样,如果你这样做,我不明白你如何限制每个ID只有前两个记录。 – 2011-06-07 08:45:10

+0

它应该工作(虽然我只在oracle中检查过它).. – StevieG 2011-06-07 09:18:14

1

我认为这将工作:

SELECT * FROM (

    (select * from test.companies where id = '2' order by ttm desc limit 2) 
    union 
    (select * from test.companies where id = '3' order by ttm desc limit 2) 

) as myunion ORDER BY ttm; 

得到你需要的东西,并由ttm命令它。

+0

感谢您的查询为我的需求提供了基础谢谢。 – 2011-06-07 09:57:55

+0

@Swapnil Sonawane所以你想要公司分组,但是以他们最大的ttm值命令,谢天谢地@Jeff Parker明白了:) – aorcsik 2011-06-07 10:01:06