2011-05-11 7 views
0

、ここではそのような場合である私は避けたい追加の重複した結果を取得してい除き、私の結果セットは罰金だ:は、複雑なクエリとが必要です

ため

:私は2つのテーブルを使用してい

id|companyname|routeid|orderdate 
1 |company1 | 23dsa | 
2 |company1 | 23dsa | 2011-04-28 
3 |company1 | 23dsa | 2011-04-05 
4 |company2 | 24gcc | 2011-22-05 

車両

id| vehiclename | routeid 
1 | van1  | 23dsa 
2 | van2  | 24gcc 

は、これは私のクエリ1:

select t1.companyname, max(t1.orderdate) as orderdate 
from order t1, vehicle t2 where t1.routeid=t2.routeid 
group by t1.companyname, t1.orderdate 
order by t1.id 

これは、クエリ2:

select t1.companyname, max(t1.orderdate) as orderdate 
    from order t1, vehicle t2 where t1.routeid=t2.routeid 
    group by t1.companyname, t1.orderdate having count(1) = 1 
    order by t1.id 

これは私の結果である:

companyname | orderdate 
company1 | 
company1 | 2011-04-28 
company1 | 2011-04-05 
company2 | 2011-22-05 

私はそれはこのようになりたい:私は行方不明になった

companyname | orderdate 
company1 | 2011-04-28 
company2 | 2011-22-05 

nullではありません:

select t1.companyname, max(t1.orderdate) as orderdate 
    from order t1, vehicle t2 where t1.orderdate is not null and t1.routeid=t2.routeid 
    group by t1.companyname, t1.orderdate 
    order by t1.id 
+0

を2番目のテーブルが関与している理由はありますか? – Henry

+0

@Henryはい私は一致するものだけ –

答えて

0

について何:

SELECT 
    companyname, MAX(orderdate) AS orderdate 
FROM 
    `order` 
GROUP BY 
    companyname 
ORDER BY 
    id 

そして、あなたがそこにいる車両のものが必要な場合:

SELECT 
    companyname, MAX(orderdate) AS orderdate 
FROM 
    `order` o, vehicle v 
WHERE 
    o.routeid=v.routeid 
GROUP BY 
    companyname 
ORDER BY 
    o.id 
+0

あなたの応答をありがとう、私はあなたのバージョン2と同じですと私のクエリバージョン1と同じです –

+1

@ Gandalf間違ってorderdateでグループ化していたので同じではありません。 – Henry

0
select t1.companyname, max(t1.orderdate) as orderdate 
from order t1, vehicle t2 where t1.routeid=t2.routeid 
group by t1.companyname 
order by t1.id 

あなただけを選択するので、orderdateでグループ化する必要はありません。

+0

と同じ結果とにかく –