我正在使用Netezza(基于PostgreSQL)并且需要在表中选择一列中不同行的所有列。可以找到一个与答案相关的问题here,但是它不处理所有列的情况,通过该答案会引发错误:
select distinct on (some_field) table1.* from table1 order by some_field;
真实数据错误摘录:
“(”(在char 77)期待'')''
答案 0 :(得分:2)
我不认为您的代码应该在Postgres中引发错误。但是,如果没有order by
:
select distinct on (some_field) table1.*
from table1
order by some_field;
答案 1 :(得分:1)
您的查询语法正确 for Postgres (就像您最初声明的那样)。参见:
您后来澄清了您实际使用 Netezza ,这与Postgres只是松散相关。 Wikipedia states:
Netezza基于PostgreSQL 7.2, [8] ,但不保持兼容性。
Netezza does not seem to support DISTINCT ON ()
, only DISTINCT
.
It supports row_number()
, though.所以这应该有效:
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY some_field) AS rn
FROM table1
) sub
WHERE rn = 1;
问题仍然存在:您希望从具有相同some_field
的每个集合中找到哪个行。如果任何行是好的,那么你就完成了。否则,您需要将ORDER BY
添加到OVER
子句。
相关: