Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 如何基于其他表值进行查询?一个查询用于另一个表的每个唯一值_Mysql - Fatal编程技术网

Mysql 如何基于其他表值进行查询?一个查询用于另一个表的每个唯一值

Mysql 如何基于其他表值进行查询?一个查询用于另一个表的每个唯一值,mysql,Mysql,我有3个表“设备”、“数据”和“变量”,如下所示: Devices table |dev_id | serialnumber | |--------|--------------| |1 | 123546 | |2 | 456879 | |3 | 789456 | . . . . . . variables table |var_id | name

我有3个表“设备”、“数据”和“变量”,如下所示:

Devices table

|dev_id  | serialnumber | 
|--------|--------------|
|1       | 123546       |
|2       | 456879       |
|3       | 789456       |
 .          .
 .          . 
 .          . 


variables table

|var_id  | name         | 
|--------|--------------|
|1       | BAT          |
|2       | TEMPERATURE  |
|3       | PRES         |
 .          .
 .          . 
 .          . 


Data table

|id  | dev_id  | var_id | value | timestmp            | 
|----|---------|--------|-------| --------------------|
|1   | 1       | 1      | 15    |  2019-08-16 19:38:28|
|2   | 1       | 2      | 30    |  2019-08-16 19:38:28|
|3   | 1       | 3      | 101005|  2019-08-16 19:38:28|
|4   | 2       | 1      | 18    |  2019-08-16 20:39:28|
|5   | 2       | 2      | 50    |  2019-08-16 20:39:28|
|6   | 1       | 1      | 60    |  2019-08-16 22:20:28|
|7   | 3       | 1      | 18    |  2019-08-16 22:39:28|
|8   | 2       | 1      | 65    |  2019-08-16 20:39:28|
 .     .         .        .         .
 .     .         .        .         .
 .     .         .        .         .
我想从数据中检索特定var\u id的每个dev\u id的最后一个值。 但我在查询或事务中没有找到这样做的方法

对于var_id=1,我需要这样的东西

| id  | dev_id | var_id | value | timestmp |
|-----|--------|--------|-------|----------|
|8    | 2      | 1      |  65   | ......   |
|7    | 3      | 1      |  18   | ......   |
|6    | 1      | 1      |  60   | ......   |

从设备获取最新记录:

SELECT d.* FROM devices de 
LEFT JOIN data d ON d.dev_id = de.dev_id 
WHERE de.dev_id = 1 
ORDER BY d.timestmp DESC 
SELECT d.* FROM variables v 
LEFT JOIN data d ON d.var_id = v.var_id 
WHERE v.var_id = 1 
ORDER BY d.timestmp DESC 

从变量获取最新记录:

SELECT d.* FROM devices de 
LEFT JOIN data d ON d.dev_id = de.dev_id 
WHERE de.dev_id = 1 
ORDER BY d.timestmp DESC 
SELECT d.* FROM variables v 
LEFT JOIN data d ON d.var_id = v.var_id 
WHERE v.var_id = 1 
ORDER BY d.timestmp DESC 
不存在以下情况:

select t.* from data t
where 
t.var_id = 1
and
not exists (
  select 1 from data
  where dev_id = t.dev_id and var_id = t.var_id and timestamp > t.timestamp
) 

请删除屏幕截图,将所有信息以文本形式包含,格式为代码,每行前面有四个或更多空格。或者进一步。。。请参阅:您所说的“每个dev_id的最后一个值”是什么意思@MarkOverton为dev_id=1记录的最后一个值,为dev_id=2记录的最后一个值,依此类推(对于设备表中的每个dev_id)你说的“最后一个值”是指“序列号”吗?我有了新的信息来清楚地理解我的问题我更新了我的答案-这更符合你的要求吗?我正试图在一个查询或交易中做到这一点。我想你需要详细说明你的问题,我认为我们不完全理解你想要完成的任务。非常感谢你!这就是我一直在寻找的问题。你能用文字解释这个问题以便更好地理解吗?谢谢:)不存在确保返回的行没有其他日期更大的行。这意味着返回的行包含每个设备和var_id的最后日期。在示例数据中,尽管同一设备和var_id=1有两行具有相同的日期。在这种情况下,两行都将返回。非常感谢:)祝您有一个愉快的一天工作,但是当var_id、dev_id和timestamp列上的数据库集索引中有多条记录时,速度太慢了。