gpt4 book ai didi

mysql - 返回计算结果集的存储过程

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

我有一张这样的 table

from   | to     | value
-----------------------
08:10 | 08:12 | 2
08:13 | 08:20 | 5
08:30 | 08:45 | 3
08:46 | 08:55 | 1

我需要按 1、10、60 分钟的间隔进行分组并获取平均值,假设每一分钟都有一个值。

注意:范围之间有空洞,从包含到不包含

from   | to     | average_value
-----------------------
08:10 | 08:19 | 4
08:20 | 08:29 | 5
08:30 | 08:39 | 3
08:40 | 08:49 | 2
08:50 | 08:59 | 1

我的想法是使用存储过程将条目转换为

time   | value
-----------------------
08:10 | 2
08:11 | 2
08:12 | 2
08:13 | 5
...
08:20 | 5
08:30 | 3
...
08:45 | 3
08:50 | 1
...
08:55 | 1

我的第一次尝试

DELIMITER $$
CREATE PROCEDURE Decompose()
BEGIN
DECLARE num_rows INT;
DECLARE from DateTime;
DECLARE to DateTime;
DECLARE value double;

DECLARE friends_cur CURSOR FOR SELECT from, to, value FROM sourcetable;

-- 'open' the cursor and capture the number of rows returned
-- (the 'select' gets invoked when the cursor is 'opened')
OPEN friends_cur;
select FOUND_ROWS() into num_rows;

WHILE num_rows > 0 DO

FETCH friends_cur INTO from, to, value;

SELECT from, value;

SET num_rows = num_rows - 1;
END WHILE;

CLOSE friends_cur;
END$$
DELIMITER ;

导致“命令不同步”错误,因为循环中的每个 SELECT 每次都会创建一个新的结果集,而不是返回一行。

问题:

  • 我可以让存储过程以某种方式工作吗?
  • 是否有一个sql可以获取每个时间间隔的平均值?

最佳答案

我认为你的基本计划是合理的。

我将从创建一个数字表开始。 (Creating a "Numbers Table" in mysql)

然后,将其转换为一个表格,其中包含您希望计算平均值的一天中每一分钟的行(包括那些没有任何值的值)以及一列来指示该特定分钟所属的时间间隔至

Time     Interval
08:00 1
08:01 1
08:02 1
08:03 1
08:04 1
08:05 2
08:06 2
....

然后使用左连接到示例表

ON intervals.Time >= Samples.Time and intervals.Time<Sample.Time

生成间隔查询,然后对其求平均值。

我认为你不需要光标。

(我会给出更具体的例子,但我缺乏对 MySql 的一些 SQL 复杂性的了解)

关于mysql - 返回计算结果集的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11982333/

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