Mysql 转换为单个 select 查询
Mysql Convert into single select query
我有以下数据库(有更多行):
有些日期和时间我可能只有 Temperature
、x-Axis Vibration
或任何字段。某些时间戳(如本图中的时间戳)缺少 Z-Axis Vibration
等字段
我想按照以下格式获取所有这些数据,并将找不到的字段转换为 '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 本身
您可以使用 cross join
生成所有行,然后填写缺失值。 '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)
我有以下数据库(有更多行):
有些日期和时间我可能只有 Temperature
、x-Axis Vibration
或任何字段。某些时间戳(如本图中的时间戳)缺少 Z-Axis Vibration
我想按照以下格式获取所有这些数据,并将找不到的字段转换为 '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 本身
您可以使用 cross join
生成所有行,然后填写缺失值。 '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)