2014-01-19 89 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

非常感謝。有用。 –