gpt4 book ai didi

MySQL - 提取 ID 组的日期范围内的最新值

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

我有以下疑问

SELECT SUM(CAST(hd.value AS SIGNED)) as case_count
FROM historical_data hd
WHERE hd.tag_id IN (45,109,173,237,301,365,429)
AND hd.shift = 1
AND hd.timestamp BETWEEN '2018-04-10' AND '2018-04-11'
ORDER BY TIMESTAMP DESC

这样,我尝试为 BETWEEN 语句中的时间范围内传递的每个 ID 选择值的总和 - 但该时间范围的最新值。因此,最终结果将是在该 ID 在该日期范围内的最后一个时间戳处传入的每个 ID 的 case_count 值的总和。

我无法弄清楚如何实现这一目标。我的历史数据表很大,但是我确实在它上面有非常具体的索引,使查询能够很好地运行 - 以及按年份对表进行分区。

任何人都可以提供有关如何获取我需要的数据的指示吗?我不想循环 ID 列表并在没有 SUM 和 LIMIT 1 的情况下运行此查询,但我想如果这是唯一的方法我可以。

最佳答案

这是一种方法:

SELECT SUM(CAST(hd.value AS SIGNED)) as case_count
FROM historical_data hd
WHERE hd.tag_id IN (45, 109, 173, 237, 301, 365, 429) AND
hd.shift = 1 AND
hd.timestamp = (SELECT MAX(hd2.timestamp)
FROM historical_data hd
WHERE hd2.tag_id = hd.tag_id AND
hd2.shift = hd.shift AND
hd2.timestamp BETWEEN '2018-04-10' AND '2018-04-11'
);

此查询的最佳索引位于 historical_data(shift, tag_id, timestamp)

关于MySQL - 提取 ID 组的日期范围内的最新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49779581/

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