我需要帮助.. 我有一张下面的表格。我需要获得日期创建列
的最小值的整行 id group users datecreated
===========================================
*39583 | group1 | user1 | 7/6/2015 23:28
39583 | group1 | user1 | 7/6/2015 23:37
39583 | group1 | user2 | 7/7/2015 15:27
39583 | group1 | user2 | 7/7/2015 19:39
39583 | group1 | user3 | 7/7/2015 22:17
39583 | group1 | user4 | 7/8/2015 19:18
39583 | group1 | user3 | 7/9/2015 2:35
39583 | group1 | user5 | 7/9/2015 14:19
*39123 | group1 | user5 | 7/5/2015 14:19
39123 | group1 | user1 | 7/5/2015 23:28
39123 | group1 | user1 | 7/5/2015 23:37
39123 | group1 | user2 | 7/5/2015 15:27
39123 | group1 | user2 | 7/6/2015 19:39
39123 | group1 | user3 | 7/6/2015 22:17
39123 | group1 | user4 | 7/6/2015 19:18
39123 | group1 | user3 | 7/7/2015 2:35
39123 | group1 | user5 | 7/7/2015 14:19
39123 | group1 | user5 | 7/7/2015 14:19
我希望在postgres中获得以下行...
id group users datecreated
===========================================
39583 | group1 | user1 | 7/6/2015 23:28
39123 | group1 | user5 | 7/5/2015 14:19
答案 0 :(得分:1)
您可以使用row_number
来获得所需的结果。
select id, group, users, datecreated from
(
select *, row_number() over(partition by id order by datecreated) as rn
from tablename
) t
where t.rn = 1;
答案 1 :(得分:0)
您可以执行GROUP BY
并使用主表执行JOIN
,例如
select t.id,
t.group,
t.users,
t.datecreated
from table1 t join (
select min(datecreated) as mindatecreated, id
from table1
group by id) xx
on t.id = xx.id and t.datecreated = xx.mindatecreated;
答案 2 :(得分:0)
使用Postgres'distinct on()
通常比使用窗口函数的解决方案更快(两者通常比具有子选择的解决方案更快)
select distinct on (id) id, "group", users, datecreated
from the_table
order by id, datecreated;
请注意group
是保留关键字,不能用作列名without quoting。