PgSQL为列中的每个不同值选择最新的ts

PgSQL为列中的每个不同值选择最新的ts,sql,postgresql,select,group-by,distinct,Sql,Postgresql,Select,Group By,Distinct,我有一张桌子 id | name | ts ------+------------+--------------------- 3812 | name1 | 2014-05-01 00:10:02 3900 | name1 | 2014-05-02 00:10:03 3838 | name2 | 2014-05-01 00:10:08 3893 | name3 | 2014-05-02 00:10:02 3933 |

我有一张桌子

id | name | ts ------+------------+--------------------- 3812 | name1 | 2014-05-01 00:10:02 3900 | name1 | 2014-05-02 00:10:03 3838 | name2 | 2014-05-01 00:10:08 3893 | name3 | 2014-05-02 00:10:02 3933 | name2 | 2014-05-02 00:10:14 3977 | name3 | 2014-05-03 00:10:01 3985 | name1 | 2014-05-03 00:10:02 4006 | name2 | 2014-05-03 00:10:10 3815 | name3 | 2014-05-01 00:10:02 id | name | ts ------+------------+--------------------- 3812 |名称1 | 2014-05-01 00:10:02 3900姓名1 2014-05-02 00:10:03 3838姓名2 2014-05-01 00:10:08 3893 | name3 | 2014-05-02 00:10:02 3933 |姓名2 | 2014-05-02 00:10:14 3977 | name 3 | 2014-05-03 00:10:01 3985 |名称1 | 2014-05-03 00:10:02 4006 |名称2 | 2014-05-03 00:10:10 3815 | name3 | 2014-05-01 00:10:02 我需要执行一个select,它只返回最新的值(通过“table.ts”)和“table.name”字段中每个不同值的一个条目

id | name | ts ------+------------+--------------------- 3977 | name3 | 2014-05-03 00:10:01 3985 | name1 | 2014-05-03 00:10:02 4006 | name2 | 2014-05-03 00:10:10 id | name | ts ------+------------+--------------------- 3977 | name 3 | 2014-05-03 00:10:01 3985 |名称1 | 2014-05-03 00:10:02 4006 |名称2 | 2014-05-03 00:10:10
请帮我完成此任务。

假设ID按顺序递增

使用相同的名称命名表和表中的列可能会导致以后出现问题

Select max(n.ID), n.name, max(n.TS) 
From Name n
group by n.name
但是,如果ID不是连续的--并且假设名称和ts是唯一的

Select a.id, a.name, a.ts
from name a
inner join (Select n.name, max(n.ts) mts from name n group by n.name) b 
  on A.Name = B.Name and A.TS = b.mts

此表中的Id按顺序递增
 select b.id, a.name, a.ts 
 from
 (
 select name, max(ts) ts  from table 
 group by name
 ) a
 left join table b on 
 a.id=b.id
select id, name, ts
from (
  select id, 
         name, 
         ts, 
         max(ts) over (partition by name) as max_ts
  from the_table
) t
where ts = max_ts;