我正在编写一个查询问题。我有很多连接,我提取了很多列,在where子句中我将date列与同一个表的最小值进行比较。但是当我得到两行的相同日期时,我只需要获得一行。 where子句就是这样:
bt.da2 = (select min(btreg.da2) from bt btreg.....
查询结果很多客户,每个客户都有bt.da2日期。我需要当一个客户有两行,bt.da2的值相同时,我只需要两行中的一行,而不是两行。 我可能没有解释清楚。如果有人知道我在问什么,有些事情不明确,请问我。
我正在使用PostgreSQL 8.3
此致 儒略
答案 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中也能正常工作。