从一列

时间:2017-01-27 12:52:02

标签: sql greatest-n-per-group netezza

我正在使用Netezza(基于PostgreSQL)并且需要在表中选择一列中不同行的所有列。可以找到一个与答案相关的问题here,但是它不处理所有列的情况,通过该答案会引发错误:

select distinct on (some_field) table1.* from table1 order by some_field;

真实数据错误摘录:

  

“(”(在char 77)期待'')''

2 个答案:

答案 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子句。

相关: