0

我知道这个问题已经被问了十几次,但我尝试了不同的解决方案,但没有一个解决了我面临的问题。

我有以下查询:

SELECT mn.meter_name, m.meter_number, m.meter_location, r.rates_meter_rate, 
   r.rates_meter_PPD, m.meter_ID, mt.metertracking_periodend, 
   mt.metertracking_read, mt.metertracking_readend 
FROM db_meters m, db_meters_name mn, db_rates_meter r, db_meters_tracking mt 
WHERE m.ICP_ID = '$ICP' AND m.meter_name_ID = mn.meter_name_ID 
  AND r.meter_ID = m.meter_ID AND r.contract_ID = '$contract_ID' 
  AND mt.meter_ID = m.meter_ID 
GROUP BY meter_ID 
ORDER BY ABS( DATEDIFF( metertracking_periodend, NOW() ) )

但它并没有完全做到它应该做的事情。它希望它会显示当前日期的最新metertracking_periodend,但相反,由于每米的metertracking表有多个条目,它显示第一个插入。

我尝试将其更改为:

ORDER BY metertracking_periodend DESC

但它的输出是一样的,它似乎是 GROUP BY Meter_ID 的东西,我需要它,因为我只想要每米的最新结果,其中最多可能有四个。

因此,如果有人可以帮助我输出最新的“metertracking_periodend”订购的信息,我们将不胜感激。谢谢。

编辑:输出 在此处输入图像描述

“metertracking_periodend”实际有一个“2013-10-01”条目,所以这是应该从表中获取的,而不是 2012-12-31 的旧条目。希望这个编辑有帮助。

4

1 回答 1

0

尝试这个:

SELECT mn.meter_name, m.meter_number, m.meter_location, r.rates_meter_rate, 
    r.rates_meter_PPD, m.meter_ID, mt.metertracking_periodend,
    mt.metertracking_read, mt.metertracking_readend 
FROM db_meters m, db_meters_name mn, db_rates_meter r, db_meters_tracking mt 
WHERE m.ICP_ID = '$ICP' AND m.meter_name_ID = mn.meter_name_ID 
AND r.meter_ID = m.meter_ID AND r.contract_ID = '$contract_ID' 
AND mt.meter_ID = m.meter_ID
AND metertracking_periodend = (
    select max(metertracking_periodend) 
    from db_meters_tracking
    where meter_ID = mt.meter_ID
    group by meter_ID
)
ORDER BY metertracking_periodend
于 2013-10-22T03:52:29.010 回答