使用GROUP BY后,从同一行中选择更多信息

时间:2015-11-17 16:53:38

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

我有一个包含例如这个数据的表:

id | value | name   | date
1  | 1     | 'one'  | 2015-01-02
2  | 1     | 'two'  | 2015-02-03
3  | 2     | 'three'| 2014-01-03
4  | 2     | 'four' | 2014-01-02

我想要每个不同的值,即具有最新日期的行的名称。所以:

value | name   | date
1     | 'two'  | 2015-02-03
2     | 'three'| 2014-01-03

我目前有这个查询:SELECT value, MAX(date) FROM table GROUP BY value,它为我提供了我正在寻找的值和日期列。如何修改查询以添加名称字段?只需将其添加到SELECT条款就不会起作用,因为Postgres会(可以理解)抱怨我必须将它添加到GROUP BY子句中。但这样做会将其添加到唯一性检查中,我的查询将返回所有4行。我需要的只是找到最新日期的行的名称。

2 个答案:

答案 0 :(得分:1)

bytes是使用Postgres执行此操作的最有效方法

distinct on()

SQLFiddle示例:http://sqlfiddle.com/#!15/dff68/1

答案 1 :(得分:0)

这将为您提供所有必填字段:

select t1.* from table t1 
inner join (
  SELECT value, MAX(date) as date FROM table GROUP BY value
 )t2 on t1.date=t2.date;

SQL小提琴:http://sqlfiddle.com/#!15/9491f/2