Postgresql 8.3重复行

时间:2013-02-26 10:29:35

标签: sql postgresql

我正在编写一个查询问题。我有很多连接,我提取了很多列,在where子句中我将date列与同一个表的最小值进行比较。但是当我得到两行的相同日期时,我只需要获得一行。 where子句就是这样:

bt.da2 = (select min(btreg.da2) from bt btreg.....

查询结果很多客户,每个客户都有bt.da2日期。我需要当一个客户有两行,bt.da2的值相同时,我只需要两行中的一行,而不是两行。 我可能没有解释清楚。如果有人知道我在问什么,有些事情不明确,请问我。

我正在使用PostgreSQL 8.3

此致 儒略

2 个答案:

答案 0 :(得分:2)

很难说这么少的信息,但我会尝试这样的事情:

select *
from (
  select product_id, -- assumed to be the primary key 
         ...
         row_number() over (partition by product_id order by bt.da2) as rn
  from products pr
    left join bt on bt.da2 = pr.some_col
) t
where rn = 1

row_number()函数用于为每个产品创建连续的数字。然后外部where子句选择第一个。您可以更改窗口定义中的order by以影响您选择的那个。

答案 1 :(得分:0)

您应该能够使用以下方法对da2的重复值进行排序:

bt.da2 = (select distinct min(btreg.da2) from bt btreg.....

我使用PostgreSQL 9.1尝试了这一点,但我确信distinct关键字在8.4中也能正常工作。