Postgresql 8.3重复行
我写的一个问题有点小问题。在where子句中,我将date列与同一表的最小值进行比较,我提取了很多连接和列。但当我得到两行的相同日期时,我只需要得到一行。where子句类似于:Postgresql 8.3重复行,sql,postgresql,Sql,Postgresql,我写的一个问题有点小问题。在where子句中,我将date列与同一表的最小值进行比较,我提取了很多连接和列。但当我得到两行的相同日期时,我只需要得到一行。where子句类似于: bt.da2 = (select min(btreg.da2) from bt btreg..... 查询结果显示有很多客户,每个客户都有bt.da2日期。我需要当一个客户有两行,具有相同的bt.da2值时,我只需要取两行中的一行,而不是两行。 我可能解释不清楚。如果有人知道我在问什么,有什么不清楚的,请问我 我正在使
bt.da2 = (select min(btreg.da2) from bt btreg.....
查询结果显示有很多客户,每个客户都有bt.da2日期。我需要当一个客户有两行,具有相同的bt.da2值时,我只需要取两行中的一行,而不是两行。
我可能解释不清楚。如果有人知道我在问什么,有什么不清楚的,请问我
我正在使用PostgreSQL 8.3
问候,,
Julian您应该能够使用以下方法对重复的da2值进行排序:
bt.da2 = (select distinct min(btreg.da2) from bt btreg.....
我使用PostgreSQL 9.1尝试了这个方法,但我确信distinct关键字也会像8.4中预期的那样工作。信息太少,很难判断,但我会尝试以下方法:
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\u number()
函数用于为每个产品创建连续的编号。然后外部where
子句选择第一个。您可以在窗口定义中通过更改顺序,以影响所选的顺序 按照条件的构造方式,子选择必须只返回一行,因此distinct不会产生任何影响。min()函数只返回一个日期。问题是,当它开始将此日期与外部bt表进行比较时,其中我有两行客户的日期与子查询返回的日期相同。您需要提供更多详细信息:您正在使用的完整语句,可能还有相关表的create table
语句。理想情况下,一个SQLFiddle示例可以显示您当前的问题我很乐意向您展示,没有问题,但它涉及32个表,我无法向您展示所有的CREATETABLE语句。基本上有产品表、客户表、付款表和银行转账表(示例中的bt表)。我只取products表,左键加入bank transfer表,因为一些客户在同一日期有多个银行转帐,所以它会显示两行或多行,这是我想要避免的。有没有一种方法可以“说”:如果有两个日期相同的传输,只返回其中一个,不管是谁。您的表是否至少有一个唯一的键列(或列的组合)注意:您至少应该在问题中添加其中一个表的定义。注2:升级。感谢您的回答,但Postgresql 8.4不支持函数row_number():(@dna:是的,它支持。8.4是引入此功能的第一个版本。我的错误是,服务器版本是8.3.13:(@dna:那么您应该尽快更新。8.3不再受支持(而且与8.4一样非常旧)谢谢,但这是我的老板做出的决定,我在那里没有权力,我正在寻求解决方案,扭曲和施压,以使他们从我那里得到想要的结果:)…8.3.13