gpt4 book ai didi

mysql:长时间整合一个表的值

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

我想将 v 值与 t 的时差从一行集成到下一行,在这样的表中:“p_values”=

+------------+-------+----------+
| measure_id | v | t |
+------------+-------+----------+
| 1 | 32 | 10:45:00 |
| 2 | 17 | 10:42:00 |
| 3 | 20 | 10:39:00 |
| 4 | 21 | 10:36:00 |
| 5 | 35 | 10:33:00 |
| 6 | 59 | 10:30:00 |
| 7 | 47 | 10:27:00 |
| 8 | 45 | 10:24:00 |
| 9 | 40 | 10:21:00 |
| 10 | 39 | 10:18:00 |
| 11 | 42 | 10:15:00 |
+------------+-------+----------+

我想将 v 值与 t 的时差相结合:

result = v[1]*(t[1]-t[2]) + v[2]*(t[2]-t[3]) + v[3]*(t[3]-t[4]) + ...

我可以在单个查询上执行此操作吗?

我正在尝试创建一个表,将每一列与下面的列连接起来,如下所示:

select * from 
(select measure_id, v, t from p_values order by t desc) a,
(select measure_id, v, t from p_values order by t desc) b
where a.t < b.t group by b.t desc;

+------------+----+----------+------------+----+----------+
| measure_id | v | t | measure_id | v | t |
+------------+----+----------+------------+----+----------+
| 9 | 83 | 11:12:00 | 10 | 25 | 11:15:00 |
| 8 | 90 | 11:09:00 | 9 | 83 | 11:12:00 |
| 7 | 24 | 11:06:00 | 8 | 90 | 11:09:00 |
| 6 | 29 | 11:03:00 | 7 | 24 | 11:06:00 |
| 5 | 72 | 11:00:00 | 6 | 29 | 11:03:00 |
| 4 | 28 | 10:57:00 | 5 | 72 | 11:00:00 |
| 3 | 22 | 10:54:00 | 4 | 28 | 10:57:00 |
| 2 | 42 | 10:51:00 | 3 | 22 | 10:54:00 |
| 1 | 35 | 10:48:00 | 2 | 42 | 10:51:00 |
| 0 | 31 | 10:45:00 | 1 | 35 | 10:48:00 |
+------------+----+----------+------------+----+----------+

根据这个表,我计算单个查询中的积分值为:

select sum(v) from 
(select (a.v + b.v)/2 * (TIME_TO_SEC(b.t) - TIME_TO_SEC(a.t))/3600 as v from
(select measure_id, v, t from p_values order by t desc) a,
(select measure_id, v, t from p_values order by t desc) b
where a.t < b.t group by b.t desc) as c;

+---------+
| sum(v) |
+---------+
| 246.948 |
+---------+

但我不确定这是否是最有效的方法。

谢谢。

最佳答案

如果您假设 measure_id 是增量的且没有间隙,那么您可以使用自连接来实现。结果查询是这样的:

select sum(p1.v*(p2.t - p1.t))
from p_values p1 join
p_values p2
on p2.measure_id = p1.measure_id + 1;

一些注意事项。首先,这会忽略最后一个 v 值,因为没有匹配的行。这个问题没有具体说明在这种情况下该怎么做,所以我假设您不希望包括这种差异。

我还留下了时间差异的简单符号。您的问题似乎是关于处理不同行的值,而不是实际计算 time 列的差异。反过来,这取决于列的数据类型,这在问题中没有指定。

最后,您的子查询有一个致命的缺陷。它有 columnsselect 中不在 group by 中。这使用了文档明确警告不要使用的扩展分组。

关于mysql:长时间整合一个表的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24058463/

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