sql - 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 | 第四_外观 |
解决方案
一种方法是使用条件聚合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;
推荐阅读
- arduino - 将 I2S 库与 Adafruit Feather Huzzah ESP8266 一起使用的问题
- excel - XLSX 从 blob 列到 Oracle 表
- flutter - 如何在 Flutter 移动端、Web 端和窗口中添加条件导入?
- reactjs - 如何路由到顶点图表中点击事件的页面?
- arrays - 使用 db.someDb.update([]) 时,如何在不创建对象的情况下在 Mongodb 中 $set 数组?
- xml - 单击评分栏时如何更改颜色
- loops - 循环遍历特定列和设置值
- apache-kafka - Spring Cloud Stream - 由于反序列化错误,在发送到 dlq 时不提交偏移量,直到处理有效记录
- assembly - 带有 OR 和 AND 符号的 MIPS CODE 数学表达式
- r - 安装 R 包 fgsea:download.file 中的错误