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

标签 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 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/

相关文章:

sql - 总问题的两倍

python - 加快 sqlite3 数据库搜索

mysql - WHMCS API-- 供应 mySQL

php - 在 localhost 中连接 MYSQL 时出现问题

sql 包不执行 printf

mysql - 在mysql查询中通过正则表达式获取子字符串

database - 需要将应用程序从 Blackfish 迁移到 Firebird

php - 在多个表中选择一个不同的值(sql)

php - 为 mysql php 设置 $_GET 格式

php - AJAX:如何在按下 "Enter"后让按钮提交?