Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 sql查询,以在数据中存在空值时从多个列中获取最新数据_Mysql - Fatal编程技术网

Mysql sql查询,以在数据中存在空值时从多个列中获取最新数据

Mysql sql查询,以在数据中存在空值时从多个列中获取最新数据,mysql,Mysql,我有一个sql表,它看起来像 +--------------------------+------------+-----------------+---------+------+-------+-------------+-------------------------+----------------------------+-------+-------+ | deviceID | date | timestamp | count

我有一个sql表,它看起来像

+--------------------------+------------+-----------------+---------+------+-------+-------------+-------------------------+----------------------------+-------+-------+
| 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的最新值?将改变您的问题,您应该为此提出一个新问题