在Postgresql数据库

时间:2016-04-28 14:18:23

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

我得到了以下记录:不同的人有相同的名字:

id  name  category_id   birthdate   family_id
1   joe   2             2014-05-01  1
2   jack  3             2013-04-01  2
3   joe   2             1964-05-01  1
4   jack  5             1982-05-01  2
5   emma  1             2014-05-01  1
6   joe   3             2003-07-06  3

现在我需要一个查询结果如下。我想每个family_id只需要一次名字。之后我需要每条记录的所有值,包括id。如果桌子在路上走得更远,我也需要它们。所以结果应该包括所有值。

id  name  category_id   birthdate   family_id
1   joe   2             2014-05-01  1
2   jack  3             2013-04-01  2
5   emma  1             2014-05-01  1
6   joe   3             2003-07-06  3

我尝试了几种方法(GROUP BYDISTINCTDISTINCT ON等),但没有一种方法适合我。

当我使用GROUP BY子句(GROUP BY name)时,我得到ERROR: column "deals.id" must appear in the GROUP BY clause or be used in an aggregate function。但是当我把id放在条款中时,我得到了所有记录。

同样不同。在那里,我必须选择结果集应该是不同的所有字段。但我需要记录的所有值。并且由于主要的每个记录在我包含id时是不同的。

我尝试了一个已经过滤所有不同名称的子句。我在where子句中使用它们。但我得到了所有的价值,包括(当然)不同的名称/ family_id记录。

有人帮我吗?

2 个答案:

答案 0 :(得分:1)

您可能没有指定组中的所有字段,如果您包含id,那么这将使行唯一。

尝试类似:

SELECT 
  name, category_id, birthdate, family_id 
FROM family 
GROUP BY 
  name, category_id, birthdate, family_id;

答案 1 :(得分:0)

它适用于DISTINCT ON

以下效果很好:

SELECT DISTINCT ON (table.name, table.family_id) table.* FROM table;

我唯一需要检查的是订购。但到目前为止我想分享我的解决方案。