2014-01-19 44 views
0

嗨,我想创建查询,返回公寓里米的状态。正确的MySQL查询使用LEFT JOIN和历史记录表的结果

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

我只需要在公寓或默认值米的最后一个状态。 当前查询返回来自BR_Parameter_Value的所有记录。我对SQL Fiddle

查询

能有人纠正我,如果我不当建设我的查询或教育我如何正确地完成我想要做一些提示?

编辑:

我基于从戈登的答案,如果日期为NOW(),但我想用同样的查询历史值,以及基于特定日期以获得仪表状态,其工作原理更新的例子。

回答

0

你可以用它来获取从参数表最近的参数值(只是where子句中添加exists声明):

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 
       ) 
    ) 

我不知道你在默认情况下是什么意思值。

+0

非常感谢。有用。 –