How to get the first and the last record per group in SQL Server 2008?

前端 未结 4 2028
梦毁少年i
梦毁少年i 2020-12-19 03:13

As the title suggests, I\'d like to select the first and last row of each set of rows grouped with a GROUP BY.

I\'ve this table with the following data

4条回答
  •  轮回少年
    2020-12-19 03:31

    This is one way -

    select  t.*
    from    tbl t
    join    (
            select [group],
                   min(val) as val_1,
                   max(val) as val_2
            from   tbl
            group by [group]
            ) v
         on t.[group] = v.[group]
        and (t.val = v.val_1
         or t.val = v.val_2);
    

    Fiddle: http://sqlfiddle.com/#!3/c682f/1/0

    Another approach:

    select id, [group], val, [start], [end]
    from(
    select t.*,
           max(val) over(partition by [group]) as max_grp,
           min(val) over(partition by [group]) as min_grp
    from tbl t
    ) x
    where val in (max_grp,min_grp)
    

提交回复
热议问题