Postgresql - Distinct On结果

rwqw0loc  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(145)

我已经在查询中使用了“distinct on”,但结果仍然重复。我只能从下面的图片中得到两个结果吗?例如:第1行和第4行或第2行和第3行,两行的ID和序列号不同。


的数据

uoifb46i

uoifb46i1#

你的行已经是不同的。如果你只想根据id不同,那么其他值来自哪一行?如果这不重要,那么你需要的是一个Id的分组,以及其他列的一些虚拟聚合(即; max(return_document),max(sales_document),max(serial_number))。或者你可以这样做:

select id,return_document, sales_document, serial_number
from (
select row_number() over (partition by id order by id) as rno, *
from myTable) tmp
where rNo = 1;

字符串
您可以任意选择每个ID的其中一行。或者使用ppostgreSQL的Distinct on:

SELECT DISTINCT ON (id) id, return_document, sales_document, serial_number 
FROM myTable;


| ID|返回文件|销售单据|序列号|
| --|--|--|--|
| 88687 |RFC-01-2300082|苏ICP备05002207号-1| R1H-03490|
| 88688 |RFC-01-2300082|苏ICP备05002207号-1| R1H-03490|
DBFiddle demo
编辑:这将适用于这个非常特定的数据集,它可能不适用于另一个(你只给了这个):

with umatch as (select *
                from (select id, row_number() over (order by id) rn from (select distinct id from myTable) t1) _t1
                         inner join
                     (select serial_number, row_number() over (order by serial_number) rn
                      from (select distinct serial_number from myTable) t2) _t2 on _t1.rn = _t2.rn)
select t2.*
from umatch t1
         inner join myTable t2 on t1.serial_number = t2.serial_number and t1.id = t2.id;


DBFiddle demo
请下次明确你的要求,并提供足够的数据和所需的文本输出(人们不喜欢SO上的图片)。

相关问题