2013-07-09 28 views
2

我有一個包含以下數據的表。我有一些銷售ID,它可能會/可能不會被修改。如果它被修改,那麼它將有修訂版本號。如果SalesId被修改,然後兩次將有版本號2避免單個表的嵌套子查詢

SalesId和修訂都是WRT對方並沒有主鍵或外鍵

SalesId -100 100 100 101 102 102 103 104 104 


Revision -0 1 2 0 0 1 0 0 1 

我的要求是 - 如果用戶提供了一個版本數字說'n',我需要得到所有有revisions<=’n’的記錄。

例如:

1.I want to know SalesId's which are not at all revised , means ‘n=0’. expected result : 101, 103 

2.I want to know SalesIds which are revised only once, means ‘n=1’. expected result : 102, 104 

,所以我寫了一個嵌套查詢 -

select Sales1.Sales_Id,Sales1.Rev 
from (select Sales_Id, Max(Revision) as "Rev" from Sales Group By Sales_Id)as Sales1 where Rev=0 

select Sales1.Sales_Id,Sales1.Rev 
from (select Sales_Id, Max(Revision) as "Rev" from Sales Group By Sales_Id)as Sales1 where Rev=1 

我得到正確的答案。

使用嵌套查詢會降低性能,我希望在不使用嵌套查詢的情況下簡化查詢。

請給我一些建議。

回答

2

在「一個查詢」,您可以使用HAVING子句:

select sales_id, max(revision) 
from Sales 
group by sales_id 
having max(revision) = 0; 

select sales_id, max(revision) 
from Sales 
group by sales_id 
having max(revision) = 1; 

我加了你的查詢中SqlFiddle,你可以看執行計劃看出區別。

SqlFiddle

+0

非常感謝你RaphaëlAlthaus –