使用左联接和历史表更正MySQL查询的结果
您好,我想创建一个查询,返回公寓中电表的状态 我有表BR_公寓,BR_仪表和BR_参数值。 仪表状态的默认值为激活状态(1)当状态发生变化时,所有历史数据都存储在BR_参数_值表中 我只需要公寓中仪表的最后状态或默认值。 当前查询返回BR_参数值中的所有记录 我对的查询示例 如果我建立的查询不正确,有人能纠正我吗?或者教我一些如何正确完成我想做的事情的技巧 编辑:使用左联接和历史表更正MySQL查询的结果,mysql,sql,Mysql,Sql,您好,我想创建一个查询,返回公寓中电表的状态 我有表BR_公寓,BR_仪表和BR_参数值。 仪表状态的默认值为激活状态(1)当状态发生变化时,所有历史数据都存储在BR_参数_值表中 我只需要公寓中仪表的最后状态或默认值。 当前查询返回BR_参数值中的所有记录 我对的查询示例 如果我建立的查询不正确,有人能纠正我吗?或者教我一些如何正确完成我想做的事情的技巧 编辑: 我已经根据Gordon的答案更新了示例,如果date是NOW(),则该示例有效,但我还想使用相同的历史值查询来根据特定日期获取仪表状
我已经根据Gordon的答案更新了示例,如果date是
NOW()
,则该示例有效,但我还想使用相同的历史值查询来根据特定日期获取仪表状态。您可以使用该查询从参数表中获取最新的参数值(只需在where
子句中添加语句即可):
选择m.*IFNULL(pva.ParameterValue,1)作为MeterIsActive,
IF(pva.ParameterValue)
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
)
)