无需手动键入所有列即可从 group by 中获取一条记录
Posted
技术标签:
【中文标题】无需手动键入所有列即可从 group by 中获取一条记录【英文标题】:Taking one record from group by without manually typing all columns 【发布时间】:2021-02-18 19:07:13 【问题描述】:我有一个包含以下列的表格:
id, col_1, col_2, col_3, .... col_1000, timestamp
我希望每个 id 只有一条记录,并采用最新的时间戳。也就是说,我的查询是:
select id, max_by(col_1, timestamp), max_by(col_2, timestamp), max_by(col_3, timestamp), ... max_by(col_1000, timestamp), max_by(timestamp, timestamp) group by id
既然有这么多列,我想知道有没有办法可以做类似的事情:
select max_by(*, timestamp) group by id
这样我就不必手动输入所有列了吗?谢谢!
【问题讨论】:
【参考方案1】:嗯。 . .你可以使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by id order by timestamp desc) as seqnum
from t
) t
where seqnum = 1;
您也可以使用相关子查询或join
来表达这一点:
select t.*
from t join
(select id, max(timestamp) as max_timestamp
from t
group by id
) tt
on t.id = tt.id and t.timestamp = tt.max_timestamp
【讨论】:
以上是关于无需手动键入所有列即可从 group by 中获取一条记录的主要内容,如果未能解决你的问题,请参考以下文章
通过 group by 和 joins 获取多个表的多个列的总和
在 SQL 中使用 Group By 和 Aggregate - 获取错误“选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 中”