我正在尝试为MTT(Manufacturing To Target)编写一些软件。一个表包含有关目标的信息,另一个表用于跟踪数据点。
以最简单的形式,表格如下:
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,时间戳= 1000,目标= 11,UCL = 13,LCL = 9 pk_target = 2,时间戳= 1200,目标= 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
请注意,在上面的示例数据集中,前两个条目的target.target为11,因为目标的时间戳是目标表中的lartest,它仍然小于dataPoint表中的timestamp条目。基本上说“对于这个数据点,目标应该是由时间戳决定的'X'。”
任何人都可以就如何实现这一目标给我一些意见吗?
谢谢!
答案 0 :(得分:1)
您可以使用相关子查询执行此操作:
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
中的时间戳。