我有以下数据库(还有更多行):
有些日期和时间我可能只有温度
、或x轴振动
或任何字段。某些时间戳(如这张图片中的时间戳)缺少诸如 Z 轴振动
我想以以下格式获取所有这些数据,并将未找到的字段转换为“NA”
我尝试了以下查询:
select entry_date, entry_time, field_name, ifnull(value, "NA") as value
from tablename
where group_name = "SL1-DSM-1" and
concat(entry_date, " ", entry_time) in
( select distinct(concat(entry_date, " ", entry_time))
from tablename
where timestamp(entry_date, entry_time) between "2019-07-22 00:00:00" and
"2019-07-23 00:00:00" ) and
field_name in (select distinct(field_name) from tablename where group_name =
"SL1-DSM-1");
这给了我结果:
有没有办法使用单个查询来实现这一点?或者至少没有。查询,以便加快速度。
注意:目前,我对每个组和字段使用不同的查询,并将它们编译成通用格式,但我希望这是否可以返回我的 MySQL 本身
最佳答案
您可以使用交叉联接
生成所有行,然后填写缺失的值。 'N/A'
不是一个好的填写,因为它是一个字符串。只需使用NULL
。
类似这样的事情:
select entry_date, entry_time, group_name, field_name,
t.value
from (select distinct entry_date, entry_time, group_name
from tablename
) dtg cross join
(select distinct field_name
from tablename
) f left join
tablename t
using (entry_date, entry_time, group_name, field_name)
关于Mysql 转换为单选查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57232463/