gpt4 book ai didi

sql - 通过在SQL中的多个列中选择最大值来选择列

转载 作者:行者123 更新时间:2023-11-29 11:32:55 25 4
gpt4 key购买 nike

想象一下下面的示例表:

time      name     value1 value2
12:00 Hans 2 4
12:30 Hans 2 4
13:00 Hans 3 5
14:00 Peter 4 4
15:00 Peter 4 4

我想按最大时间戳和名称进行过滤。

意思是我想得到

13:00     Hans     3      5
15:00 Peter 4 4

使用 按名称从表组中选择 max(time),name,value1,value2不起作用。它告诉我对 value1 和 value2 也使用聚合函数或分组。

如果我按名称、value1 和 value2 分组,那么我会得到以下结果,因为两行 Hans 的 value1 和 value2 不同:

12:30     Hans     2      4
13:00 Hans 3 5
15:00 Peter 4 4

解决方案是什么?

最佳答案

您可以使用子查询获取每个 namemax(time),然后将其连接回您的表以获得最终结果:

select t1.time,
t1.name,
t1.value1,
t1.value2
from yourtable t1
inner join
(
select max(time) MaxTime, name
from yourtable
group by name
) t2
on t1.time = t2.maxtime
and t1.name = t2.name

根据您使用的数据库,如果您可以应用像 row_number()rank() 这样的窗口函数,那么您的查询将类似于以下:

select time, name, value1, value2
from
(
select time, name, value1, value2,
rank() over(partition by name order by time desc) rn
from yourtable
) src
where rn = 1

参见 SQL Fiddle with Demo两个查询的

关于sql - 通过在SQL中的多个列中选择最大值来选择列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15337728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com