首页 > 解决方案 > 选择按日期排序的分区的第一行和最后一行

问题描述

嗨,你有一个看起来像这样的数据集 在此处输入图像描述

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

    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 

但遗憾的是我得到了一个错误,我不明白为什么谢谢你的帮助:)

标签: sqlpivotgreatest-n-per-groupwindow-functions

解决方案


您可以使用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

推荐阅读