我正在使用 MySQL 来保存我在 HPC 集群上运行的大量模拟的数据。每个模拟在一个表中都有自己的条目,还有一个保存模拟时间步结果数据的表。时间步长结果数据表非常大(几千万到几亿行)。表格如下所示:
表:模拟
id descriptor notes
1 SIM1 notes here...
2 SIM2 SIM2 Notes...
... ... ...
8643 SIM8643 SIM8643 Notes...
表:simulations_ts
id simulation_id step data_value
1 1 1 0.05
2 1 2 0.051
... ... ... ...
1983 1 1983 0.253
1984 2 1 0.043
... ... ... ...
59345435 8643 2832 0.067
我希望能够有效地返回下表:
simulation_id first_ts_id last_ts_id num_steps
1 1 1983 1983
2 1984 2938434 2052
... ... ... ...
8643 12835283 59345435 2832
我知道我可以执行如下查询:
SELECT
simulation_id
MIN(step) AS first_step,
MAX(step) AS last_step,
COUNT(id) AS num_steps
FROM
simulations_ts
GROUP BY
simulation_id
ORDER BY
simulation_id ASC
并且有一些方法可以进行子查询以提取一个聚合的相应 id,但我没有找到为两个聚合函数提取相应 id 的示例。这是否有可能以有效的方式在单个查询中完成,或者我最好只是单步执行并分别进行最小查找和最大查找?