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;
如果我有这样的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;