涉及2个带时间戳列的表的Mysql查询

时间:2013-09-17 12:03:27

标签: mysql sql database nested

我正在尝试为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'。”

任何人都可以就如何实现这一目标给我一些意见吗?

谢谢!

1 个答案:

答案 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中的时间戳。