2011-05-11 96 views
0

我的結果集優良似乎除了我得到我想要避免額外的重複的結果,這裏是這種情況:需要用複雜的查詢幫助

我用兩個表:

爲了

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 

我失蹤不爲空:

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

是否有您所涉及的第二個表什麼理由? – Henry 2011-05-11 22:37:17

+0

@亨利是我只有那些匹配 – 2011-05-11 22:46:55

回答

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相同 – 2011-05-11 22:48:20

+1

@Gandalf它是不一樣的,因爲你是由orderdate分組是錯誤的。 – Henry 2011-05-11 23:25:09

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

無論如何相同的結果 – 2011-05-11 22:48:43