2010-05-06 141 views
2

我有一個包含6個字段的表。這些列是ID,new_id價格,標題,Img,活動。我有價格列重複的數據。 當我做一個選擇時,我想只顯示不同的行,其中new_id不相同。 e.g.-消除SQL查詢中的重複項

ID New_ID Price Title  Img Active 
1 1  20.00 PA-1  0X4... 1 
2 1  10.00 PA-10  0X4... 1 
3 3  20.00 PA-11  0X4... 1 
4 4  30.00 PA-5  0X4... 1 
5 9  20.00 PA-99A 0X4... 1 
6 3  50.00 PA-55  0X4... 1 

當select語句後,只有ID(1,4,9,6)行應該顯示。原因是價格較高的new_ID應該顯示出來。 我該怎麼做?

在支持窗口聚集數據庫
+1

ID 9沒有一行嗎? – 2010-05-06 23:49:36

+0

對不起,我的意思是1,4,5,6。最高價格和new_id只有一次 – ewdef 2010-05-06 23:55:16

+0

會有多少行?性能有多重要? – 2010-05-06 23:58:40

回答

2

(甲骨文,SQL Server 2005中的PostgreSQL 8.4)是這樣的:

select id, new_id, price, title, img, active 
from (select id, new_id, price, title, img, active, 
      row_number() over (partition by new_id order by price desc) as position 
     from the_table 
) where position = 1 
0
select * 
from T as t 
where exists (select 1 from T where new_id = t.new_id 
group by new_id having max(price) = t.price) 

要測試存在,用exists!在這裏,你想要基於new_id的最高價格的行。

我想只顯示不同的行

通常,當有人想「重複行」,他們真正想要的「最新」的行或那些「最」的東西。它幾乎總是可以以與上述類似的形式表達。

0
select * from ABC where charge_amt in(
SELECT  charge_amt 
FROM   ABC 
GROUP BY charge_amt 
HAVING  (COUNT(charge_amt) = 1)) 
order by charge_amt asc