您可以两次使用row_number()
:
select color,name,time
from (
select
t.*,row_number() over(partition by name order by time) rn_asc,row_number() over(partition by name order by time desc) rn_desc
from mytable t
) t
where rn_asc = 1 or rn_desc = 1
如果您希望两种颜色都在同一记录中,则可以进行汇总:
select
name,max(case when rn_asc = 1 then color end) as first_color
max(case when rn_desc = 1 then color end) as last_color
from (
select
t.*,row_number() over(partition by name order by time desc) rn_desc
from mytable t
) t
where rn_asc = 1 or rn_desc = 1
group by name
,
在许多数据库中,最快的方法将使用相关子查询:
select t.*
from t
where t.time = (select min(t2.time)
from t t2
where t2.name = t.name
) or
t.time = (select max(t2.time)
from t t2
where t2.name = t.name
) ;
您要在(name,time)
上建立索引。
本文链接:https://www.f2er.com/3151707.html