Mysql sql查询,以在数据中存在空值时从多个列中获取最新数据
我有一个sql表,它看起来像Mysql sql查询,以在数据中存在空值时从多个列中获取最新数据,mysql,Mysql,我有一个sql表,它看起来像 +--------------------------+------------+-----------------+---------+------+-------+-------------+-------------------------+----------------------------+-------+-------+ | deviceID | date | timestamp | count
+--------------------------+------------+-----------------+---------+------+-------+-------------+-------------------------+----------------------------+-------+-------+
| deviceID | date | timestamp | counter | rssi | vavId | nvo_airflow | nvo_air_damper_position | nvo_temperature_sensor_pps | block | floor |
+--------------------------+------------+-----------------+---------+------+-------+-------------+-------------------------+----------------------------+-------+-------+
| fd00::212:4b00:1957:d616 | 2020-02-29 | 12:40:01.513066 | 805 | 91 | 7 | NULL | NULL | 26.49 | NULL | ABCD |
| fd00::212:4b00:1957:d616 | 2020-02-29 | 12:41:01.542272 | 807 | 94 | 5 | NULL | NULL | 26.37 | NULL | ABCD |
| fd00::212:4b00:1957:d616 | 2020-02-29 | 12:43:01.699023 | 811 | 90 | 7 | 50 | NULL | NULL | NULL | ABCD |
| fd00::212:4b00:1957:d616 | 2020-02-29 | 12:46:01.412259 | 817 | 64 | 26 | NULL | NULL | 25.85 | NULL | ABCD |
| fd00::212:4b00:1957:d616 | 2020-02-29 | 12:48:01.576133 | 821 | 91 | 26 | NULL | NULL | 27.54 | NULL | ABCD |
| fd00::212:4b00:1957:d616 | 2020-02-29 | 12:49:01.529593 | 823 | 91 | 7 | 45 | 72 | NULL | NULL | ABCD |
我想写一个查询,从中获取所有vavId或特定vavId 7的nvo\u气流、nvo\u空气\u风门\u位置、nvo\u温度\u传感器\u PP的最新非空值(基于时间戳)
如果考虑VAV 7,它应该返回
nvo_airflow,nvo_air_damper_position,nvo_temperature_sensor_pps, vavId
45,72,26.49
如果没有空值,我可以编写一个查询来获取最新的值
"""SELECT t1.deviceId, t1.date, t1.vavId, t1.timestamp, t1.nvo_airflow , t1.nvo_air_damper_position , t1.nvo_temperature_sensor_pps
FROM
(SELECT deviceId, date, nvo_airflow, nvo_air_damper_position, nvo_temperature_sensor_pps, vavId, timestamp, counter from vavData where date=%s and floor=%s) t1
INNER JOIN
(SELECT date,max(timestamp) as timestamp,vavId from vavData where date=%s and floor=%s group by vavId) t2
ON (t1.timestamp = t2.timestamp) order by t1.vavId"""
但我不知道如何为有一些空值的多个列获取最新数据。有人能帮我写一个问题吗
SELECT
nvo_airflow,nvo_air_damper_position,nvo_temperature_sensor_pps, vavId
FROM
vavData
WHERE NOT ( nvo_airflow IS NULL
OR nvo_air_damper_position IS NULL
OR nvo_temperature_sensor_pps IS NULL )
ORDER BY `date` DESC, `timestamp` DESC
选择数据where not
并对其排序将排除具有空值的列
此查询将返回所有行,最新的一行。可能使用函数将NULL替换为0(零)?但即使是这些行,我也会将0作为最新的行,对吗?我想要最新的非空值大概您的意思是日期和时间戳
期望的结果应该是什么样的?相应地编辑您的问题。是否希望所有列nvo\u气流
、nvo\u空气风门位置
和nvo\u温度传感器
都不为空的行?如果我有10个VAVID,我只希望返回10行。如何仅获取每个vavId的最新值?将改变您的问题,您应该为此提出一个新问题