3

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

谁能给我一些关于我将如何做到这一点的意见?

谢谢!

4

1 回答 1

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的最新数据。

于 2013-09-17T12:07:38.037 回答