gpt4 book ai didi

mysql - 从 MySql 中的最新时间戳中获取多列的最大值

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:15 26 4
gpt4 key购买 nike

我正在尝试获取多个相似列中的*usedpc 值列表,并order desc 以获得最差的违规者。此外,我只需要从每个 sys_id 的最新时间戳中选择值。示例数据:

Sys_id | timestamp | disk0_usedpc | disk1_usedpc | disk2_usedpc
---
1 | 2016-05-06 15:24:10 | 75 | 45 | 35
1 | 2016-04-06 15:24:10 | 70 | 40 | 30
2 | 2016-05-06 15:24:10 | 23 | 28 | 32
3 | 2016-05-06 15:24:10 | 50 | 51 | 55

期望的结果(例如假设 limit 2):

1 | 2016-05-06 15:24:10 | disk0_usedpc | 75
3 | 2016-05-06 15:24:10 | disk2_usedpc | 55

我知道我可以使用 greatestmax 和组时间戳从每列中获取最大值,以仅获取最新值,但我不知道如何获取整个有序列表(不仅仅是每列的最大值/最大值,而是“所有 3 个磁盘列中的 5 个最高值”)。

编辑:我设置了一个 SQLFiddle 页面: http://sqlfiddle.com/#!9/82202/1/0

EDIT2:我对延误感到非常抱歉。我能够使所有三种解决方案都起作用,谢谢。如果@PetSerAl 可以将他的解决方案放在答案中,我会将其标记为已接受,因为此解决方案使我能够非常顺利地进一步定制。

最佳答案

您可以将 vm_disk 表与三行表连接起来,为您的每个磁盘创建单独的行。然后,由于现在每个磁盘都有行,因此您可以轻松地对它们进行过滤或排序。

select
`sys_id`,
`timestamp`,
concat('disk', `disk`, '_usedpc') as `name`,
case `disk`
when 0 then `disk0_usedpc`
when 1 then `disk1_usedpc`
when 2 then `disk2_usedpc`
end as `usedpc`
from
`vm_disk` join
(
select 0 as `disk`
union all
select 1
union all
select 2
) as `t`
where
(`sys_id`, `timestamp`) in (
select
`sys_id`,
max(`timestamp`)
from `vm_disk`
group by `sys_id`
)
order by `usedpc` desc
limit 5

关于mysql - 从 MySql 中的最新时间戳中获取多列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38557606/

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