我正在尝试为 MTT(目标制造)编写一些软件。一个表包含有关目标的信息,另一个表用于跟踪数据点。
在最简单的形式中,表格的布局如下:
Table target
field pk_target int pk autoincrement
field timestamp double
field target double
field UCL double //upper control limit
field LCL double //lower control limit
Table dataPoint
field pk_dataPoint int pk autoincrement
field timestamp as double
field value as double
目标表将仅在需要时更新,可以是每月一次到每天一次或更多次。 dataPoint 表将每 4 小时更新一次。 我想进行一个结合两个表中数据的查询,以便列出 dataPoint 表中的每个条目以及 dataPoint 表中特定时间戳的目标表中的最新数据。
例如,假设目标表包含 2 个条目: pk_target=1,timestamp=1000,target=11,UCL=13,LCL=9 pk_target=2,timestamp=1200,target=10,UCL=12,LCL=8
假设 dataPoints 表包含 3 个条目:
pk_dataPoint=1,timestamp=1001,value=9.4
pk_dataPoint=2,timestamp=1125,value=9.7
pk_datapoint=3,timestamp=1420,value=10.1
所以我正在构建的查询应该返回如下结果集:
dataPoint.pk_DataPoint=1,dataPoint.timestamp=1001.dataPoint.value=9.4,target.target=11
dataPoint.pk_DataPoint=2,dataPoint.timestamp=1125.dataPoint.value=9.7,target.target=11
dataPoint.pk_DataPoint=3,dataPoint.timestamp=1420.dataPoint.value=10.1,target.target=10
请注意,在上面的示例数据集中,前 2 个条目的 target.target 为 11,因为目标的时间戳是目标表中最晚的,但仍小于 dataPoint 表中的时间戳条目。本质上是说“对于这个数据点,目标应该是由时间戳确定的‘X’”。
任何人都可以就如何完成此任务提供一些意见吗?
谢谢!
最佳答案
您可以使用相关子查询来做到这一点:
select dp.*,
(select target
from Target t
where t.timestamp <= dp.timestamp
order by t.timestamp desc
limit 1
) as target
from DataPoint dp;
这是假设最合适的数据是来自 Target
在 DataPoint
中的时间戳之前的最新数据。
关于涉及带有时间戳列的 2 个表的 Mysql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18849366/