选择按日期排序的分区的第一行和最后一行

问题描述 投票:0回答:1

您有一个看起来像这样的数据集enter image description here

我需要编写查询以返回每个人选择的第一种和最后一种颜色。这是我的代码

    Select t1.name,t1.color,min(t1.rnkmin) ,t2.color,max(t2.rnkmax) 
    From(
   Select name,color,
  Danse_rank() over(partition by name order by time asc) as rnkmin 
  From table 3) as t1 inner join (
 Select name,color,
 Danse_rank() over (partition by name order by date asc) as rnkmax 
  From table 3) as t2 on t1.name=t2.name 

但是可惜我遇到错误,我不明白为什么谢谢您的帮助:)

sql function window partition
1个回答
1
投票

您可以使用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) 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
group by name
© www.soinside.com 2019 - 2024. All rights reserved.