gpt4 book ai didi

mysql - 获取每种类型的最新记录

转载 作者:行者123 更新时间:2023-11-29 16:20:18 24 4
gpt4 key购买 nike

我有一个名为指标的实体表,每个指标都有一个随时间变化的值。我将这个变化值存储在另一个名为 metric_history 的表中。

指标:

id, name, category
1, File, Disk
2, CPU, Hardware
3, Memory, Hardware
4, MySQL, Database

指标历史记录:

id, mId, value, recordCreated
1, 1, lorem, 2019-02-06 15:19:33
2, 1, ipsum, 2019-02-06 15:19:43
3, 2, at, 2019-02-06 15:37:48
4, 1, dolor, 2019-02-06 15:41:31
5, 2, vero, 2019-02-06 15:42:02
6, 1, sit, 2019-02-06 15:47:15
7, 2, eos, 2019-02-06 15:49:11
8, 1, amet, 2019-02-06 15:50:59
9, 4, sed, 2019-02-06 15:54:09

我正在尝试构建一个查询,该查询将返回每个查询的最新时间戳,因此在示例中将是:

结果:

8, 1, amet, 2019-02-06 15:50:59
7, 2, eos, 2019-02-06 15:49:11
9, 4, sed, 2019-02-06 15:54:09

我似乎在兜圈子,试图找到一个优雅的查询,但现在怀疑我的表格设计。这就是我所在的位置,似乎可以工作:

SELECT id, dmId, value, recordCreated
FROM metric_history
WHERE (dmId, recordCreated)
IN (SELECT DISTINCT dmId, MAX(recordCreated) FROM metric_history GROUP BY dmId)

我看到的另一种选择是在指标表中添加一个额外的时间戳列,并在每次更新历史表时更新该列,但这似乎也不正确。

我应该在这里编写查询还是我的表设计错误?我倾向于前者。

最佳答案

使用 MySQL-8.0、MariaDB-10.2 可以使用窗口函数得到答案 like this :

SELECT id, mId, value, recordCreated
FROM (
SELECT
id, mId, value, recordCreated,
ROW_NUMBER() OVER (PARTITION BY mId ORDER BY recordCreated DESC) AS `rank`
FROM metric_history
ORDER BY id
) AS tmp
WHERE tmp.`rank` = 1

关于mysql - 获取每种类型的最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54562926/

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