Mysql 转换为单个 select 查询

Mysql Convert into single select query

我有以下数据库(有更多行):

有些日期和时间我可能只有 Temperaturex-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)