PgSQL为列中的每个不同值选择最新的ts
我有一张桌子 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:10PgSQL为列中的每个不同值选择最新的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按顺序递增 使用相同的名称命名表和表中的列可能会导致以后出现问题
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;