首页 > 解决方案 > Mysql转换成单选查询

问题描述

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

在此处输入图像描述

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

标签: mysqlsqlselectmysql-5.7

解决方案


您可以使用生成所有行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)

推荐阅读