SQL:如何根据聚合列中的其他列选择值

SQL: how to pick a value based on other column in an aggregated column

如果我有这样的table:

team_id score timestamp
1 8 2022-01-05
1 10 2022-02-01
2 5 2022-01-06
2 9 2022-01-15
2 7 2022-01-20

我只想要球队 ID 和按 ID 分组的最新比分:

team_id score
1 10
2 7

所以问题是当我按 ID 分组时,我如何 select 根据时间戳得到正确的分数?我可以在一个查询中执行此操作吗?谢谢。

SELECT a.* FROM scores as a 
LEFT JOIN scores as b ON (a.teamid = b.teamid AND a.tmstamp < b.tmstamp)
WHERE b.tmstamp is NULL;

本质上,您根据团队 ID 将 table 加入自身,但确保时间戳更大

您可以使用 max window 函数:

select team_id, score from
(select *, max(timestamp) over(partition by team_id) as maxt from table_name) t
where timestamp = maxt;

Fiddle