消除SQL查询中的重复项

时间:2010-05-06 23:46:00

标签: sql duplicates

我有一张包含6个字段的表格。列是ID,new_id价格,标题,Img,活动。我有价格列重复的数据。 当我做一个选择时,我想只显示new_id不相同的不同行。 e.g .-

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的原因。 我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

在支持窗口聚合的数据库(oracle,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

答案 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的最大价格的行。

  

我想只显示不同的行

通常当有人想要“不同的行”时,他们真的想要“最新”的行或那些“最”的行。它几乎总是可以用类似于上面的形式表达。

答案 2 :(得分: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