您好我想创建一个返回公寓米的状态的查询。
我有表BR_Apartment,BR_Meter和BR_Parameter_Value。 仪表状态的默认值处于活动状态(1)当状态发生变化时,所有历史数据都存储在BR_Parameter_Value表中。
我只需要公寓中的米的最后状态或默认值。 当前查询返回BR_Parameter_Value的所有记录。
的查询示例如果我错误地构建了我的查询,或者教给我一些关于如何正确完成我想做的事情的提示,有人可以纠正我吗?
修改
我根据Gordon的回答更新了示例,如果日期为NOW()
,则可以使用该示例,但我希望对历史值使用相同的查询,以便根据具体日期获取仪表状态。
答案 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
)
)
我不知道默认值是什么意思。