SQL Group By另一列上的最新订单

时间:2013-10-22 01:48:44

标签: mysql sql

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

我有以下查询:

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”所订购的信息,我们将不胜感激。感谢。

编辑:输出 enter image description here

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

1 个答案:

答案 0 :(得分: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