使用LEFT JOIN和History表更正MySQL查询的结果

时间:2014-01-19 20:03:42

标签: mysql sql

您好我想创建一个返回公寓米的状态的查询。

我有表BR_Apartment,BR_Meter和BR_Parameter_Value。 仪表状态的默认值处于活动状态(1)当状态发生变化时,所有历史数据都存储在BR_Parameter_Value表中。

我只需要公寓中的米的最后状态或默认值。 当前查询返回BR_Parameter_Value的所有记录。

我对SQL Fiddle

的查询示例

如果我错误地构建了我的查询,或者教给我一些关于如何正确完成我想做的事情的提示,有人可以纠正我吗?

修改

我根据Gordon的回答更新了示例,如果日期为NOW(),则可以使用该示例,但我希望对历史值使用相同的查询,以便根据具体日期获取仪表状态。

1 个答案:

答案 0 :(得分:0)

您可以使用它来从参数表中获取最新的参数值(只需在exists子句中添加where语句):

SELECT m.*, IFNULL( pva.ParameterValue, 1 ) AS MeterIsActive,
       IF( pva.ParameterValue <1, 'meterNotActive', '' ) AS MeterTypeClass
FROM BR_Meter m INNER JOIN
     BR_Apartment a
     ON ( m.ApartmentID = a.ApartmentID ) LEFT JOIN
     BR_Parameter_Value pva
     ON ( pva.ForeignID = m.MeterID AND
          pva.ParameterDate <= NOW( ) AND
          pva.ParameterID =12
        ) 
WHERE m.ApartmentID = 2452 and
      (not exists (select 1
                   from BR_Parameter_value pv2
                   where pv2.ForeignID = pva.ForeignID and
                         pv2.parameterid = pva.parameterid and
                         pv2.ParameterDate > pva.ParameterDate
                  )
      )

我不知道默认值是什么意思。