首页 > 解决方案 > Group by 在查询中获取文本列中的最后一项,同时聚合 int 列

问题描述

有人可以帮我聚合 int 列并获取与最新 col2 日期列对应的 col4 文本值。

假设我们有下表'Table1':

col1 col2 col3 col4
姓名 2021-01-01 50 首次亮相
姓名 2021-01-02 60 第二_外观
姓名 2021-01-04 40 第三_外观
地方 2021-01-01 50 首次亮相
地方 2021-01-03 60 第二_外观
地方 2021-01-05 40 第三_外观
地方 2021-01-04 40 第四_外观
select name, max(col2), max(col3), max(col4)
from Table1
group by col1;

上面的查询会给我这个:

col1 col2 col3 col4
姓名 2021-01-01 150 首次亮相
地方 2021-01-05 190 首次亮相

任何人都可以帮助我查询以获取下表:

col1 col2 col3 col4
姓名 2021-01-01 150 第三_外观
地方 2021-01-05 190 第四_外观

标签: sqlsql-servertsqlgroup-by

解决方案


一种方法是使用条件聚合row_number()

select col1, max(col2), sum(col3),
       max(case when seqnum = 1 then col4 end) as col4
from (select t.*,
             row_number() over (partition by col1 order by col2 desc) as seqnum
      from t
     ) t
group by col1;

推荐阅读