1

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

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

查询结果很多客户,每个客户都有那个bt.da2日期。我需要当一个客户有两行,具有相同的 bt.da2 值时,我只需要取两行中的一个,而不是两行。我可能解释不清楚。请如果有人对我在问什么有一点线索,有些不清楚,请问我。

我在用着PostgreSQL 8.3

问候,朱利安

4

2 回答 2

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窗口定义中的 以影响您选择的那个。

于 2013-02-26T12:50:57.717 回答
0

您应该能够使用以下方法整理出 da2 的重复值:

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

我使用 PostgreSQL 9.1 对此进行了尝试,但我确信 distinct 关键字在 8.4 中也能按预期工作。

于 2013-02-26T10:37:49.060 回答