Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 8.3重复行_Sql_Postgresql - Fatal编程技术网

Postgresql 8.3重复行

Postgresql 8.3重复行,sql,postgresql,Sql,Postgresql,我写的一个问题有点小问题。在where子句中,我将date列与同一表的最小值进行比较,我提取了很多连接和列。但当我得到两行的相同日期时,我只需要得到一行。where子句类似于: bt.da2 = (select min(btreg.da2) from bt btreg..... 查询结果显示有很多客户,每个客户都有bt.da2日期。我需要当一个客户有两行,具有相同的bt.da2值时,我只需要取两行中的一行,而不是两行。 我可能解释不清楚。如果有人知道我在问什么,有什么不清楚的,请问我 我正在使

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

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