gpt4 book ai didi

mysql - 在 MySQL 中,如何编写查询以从另一个表中的位置选择数据范围?

转载 作者:行者123 更新时间:2023-11-29 14:45:43 25 4
gpt4 key购买 nike

我目前正在尝试处理一大块模拟数据(约 2Gb 的值(value))。数据位于表格中,如下所示:

Table: Simulation Data
+-------+--------+----------+-------+
| id | run_id | timestep | value |
+-------+--------+----------+-------+
| 1 | 1 | 1 | 0.00 |
| 2 | 1 | 2 | 0.003 |
| : | : | : | : |
| 9543 | 1 | 9543 | 0.23 |
| 9544 | 2 | 1 | 0.00 |
| : | : | : | : |
+-------+--------+----------+-------+

因此,对于每次运行(由 run_id 标识),都有许多具有相应数据的时间步(在 run_id 1 的情况下,有 9543 个时间步)。

在模拟运行期间,会发生一些事件。这些事件时间步长记录在另一个表中:

Table: Simulation Events
+-------+--------+----------+
| id | run_id | timestep |
+-------+--------+----------+
| 1 | 1 | 152 |
| 2 | 1 | 193 |
| 3 | 1 | 382 |
| : | : | : |
| 143 | 1 | 9382 |
| 144 | 2 | 137 |
| : | : | : |
+-------+--------+----------+

因此,对于这组数据,run_id 1 在时间步 152、193、382、... 9382 发生了事件。run_id 2 在时间步 137 等发生了第一个事件。我对发生的情况感兴趣每个 run_id 的每个事件之前的 3 个时间步、该事件的时间步以及之后的 3 个时间步。我想组合一个查询,返回如下所示的内容:

+--------+----------------+----------+-------+
| run_id | event_timestep | delta_ts | value |
+--------+----------------+----------+-------+
| 1 | 152 | -3 | 0.053 |
| 1 | 152 | -2 | 0.042 |
| 1 | 152 | -1 | 0.031 |
| 1 | 152 | 0 | 0.003 |
| 1 | 152 | 1 | 0.532 |
| 1 | 152 | 2 | 0.736 |
| 1 | 152 | 3 | 1.138 |
| 1 | 193 | -3 | 0.049 |
| : | : | : | : |
| 1 | 9382 | -3 | 0.068 |
| : | : | : | : |
| 1 | 9382 | 3 | 1.523 |
+--------+----------------+----------+-------+

其中第一行 delta_ts = -3 是来自时间步长 149 的值,-2 是来自时间步长 150 的值,-1 是来自时间步长 151 的值,等等。对于将一个查询放在一起来执行此操作有什么想法吗?

最佳答案

对此有两种不同的观点:

  • 您可以使用空白连接(笛卡尔积)select ... from table t1, table t2 where ... ,但您必须找出链接两行的条件当且仅当它们“相关”。另请记住,在您的示例中,对是可交换的,因此请添加类似 t1.id<t2.id 的条件。 -- 也排除自连接。
  • 或者您可以在存储过程中使用游标,并存储前一个 n 的值。步骤,并手动关联它们。这速度较慢,使用更多内存,但更容易编写。

关于mysql - 在 MySQL 中,如何编写查询以从另一个表中的位置选择数据范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6997003/

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