mysql - 内部加入最近的行

标签 mysql sql

我有 2 个表需要加入一个 select 语句,它应该只给我每个 sensorID 的最后一行(每个 sensorID 的最新值)。这是我的表格:

sensorID| Name | Description |   stationID
---------------------------------
1 |  Name1   |  Desc1   | 2
2 |  Name2   |  Desc2   | 1
3 |  Name3   |  Desc3   | 3
4 |  Name4   |  Desc4   | 2

值(value)观

vID | sensorID | Date | Time |  value
---------------------------------
1 |  1   |  2016-12-29   | 15:08:00 | 0.2
2 |  1   |  2016-12-29   | 15:10:00 | 0.21
3 |  1   |  2016-12-29   | 15:12:00 | 0.4
4 |  4   |  2016-12-29   | 15:14:00 | 12.2

我尝试运行以下命令:

SELECT * FROM H INNER JOIN Values V ON H.sensorID = V.sensorID WHERE H.stationID = 2;

产生了这些结果:

sensorID | Name | Description | stationID | vID | sensorID | Date   | Time     | value
1    | Name1|  Desc1      | 2         | 1   |    1     |2016-12-29  | 15:08:00 | 0.2
1    | Name1|  Desc1      | 2         | 2   |    1     |2016-12-29  | 15:10:00 | 0.21
1    | Name1|  Desc1      | 2         | 3   |    1     |2016-12-29  | 15:12:00 | 0.4
4    | Name4|  Desc4      | 2         | 4   |    1     |2016-12-29  | 15:14:00 | 12.2

但我正在寻找这个输出:

sensorID | Name | Description | stationID | vID | sensorID | Date   | Time     | value
1    | Name1|  Desc1      | 2         | 3   |    1     |2016-12-29  | 15:12:00 | 0.4
4    | Name4|  Desc4      | 2         | 4   |    1     |2016-12-29  | 15:14:00 | 12.2

最佳答案

如果您想要每个传感器的最后一行,我倾向于使用 id 列而不是日期/时间:

SELECT *
FROM H INNER JOIN
     Values V
     ON H.sensorID = V.sensorID
WHERE H.stationID = 2 AND
      V.id = (SELECT MAX(v2.id) FROM Values v2 WHERE v2.SensorId = v.SensorId);

此版本可以很好地利用 Values(SensorId, id) 上的索引。

关于mysql - 内部加入最近的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41483281/

相关文章:

MySQL:更快地执行多个条件的左连接

php - 使用php从数据库列中删除逗号分隔值的函数

php - 从字幕文件中删除 "acceleration"

php - MySQL 从 IPBoard 帐户授权用户

mysql - 获取MySQL中每月的费用总额

sql - 创建创建数据库和表的 SQL 脚本

mysql - 向表中插入行并添加序列

mysql - 插入自定义标准

php - 从 Web 表单中搜索数据库表

Mysql优化算法,保存历史更改的变体