Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql查询,涉及2个带有时间戳列的表_Mysql_Sql_Database_Nested - Fatal编程技术网

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

Mysql查询,涉及2个带有时间戳列的表,mysql,sql,database,nested,Mysql,Sql,Database,Nested,我正试图为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 contro

我正试图为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
目标表将仅在需要时更新,可以是每月一次到每天一次或更多。数据点表将每4小时更新一次。 我想做一个查询,将两个表中的数据组合在一起,这样dataPoint表中的每个条目都会与目标表中dataPoint表中特定时间戳的最新数据一起列出

例如,假设目标表包含2个条目: pk_目标=1,时间戳=1000,目标=11,UCL=13,LCL=9 pk_目标=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对于前2个条目是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;

这是假设最合适的数据是DataPoint中时间戳之前来自目标的最新数据。

谢谢。我现在就试试看。。例如,如果我想从目标表返回多个字段以包含UCL和LCL,该怎么办?@user2787435。您可以返回id,然后连接回原始表。