Php 如何在MySQL中使用WHERE和MAX获取最新数据
这是我当前的MySQL表:Php 如何在MySQL中使用WHERE和MAX获取最新数据,php,mysql,sql,Php,Mysql,Sql,这是我当前的MySQL表: Crop ID Price DateUpdated Area Okra 4 50 2014-02-05 21:42:26 Bulua Eggplant 5 20 2014-02-05 21:42:26 Lapasan Okra 6 35 2014-02-05 21:42:26 Agora Cau
Crop ID Price DateUpdated Area
Okra 4 50 2014-02-05 21:42:26 Bulua
Eggplant 5 20 2014-02-05 21:42:26 Lapasan
Okra 6 35 2014-02-05 21:42:26 Agora
Cauliflower 8 300 2014-02-05 21:42:26 Patag
Onion 9 10 2014-02-05 22:02:34 Cogon
Kalabasa 10 50 2014-02-05 22:59:30 Cogon
Garlic 11 130 2014-02-05 22:59:44 Cogon
Onion 14 34.4 2014-02-05 23:12:21 Cogon
Onion 15 54 2014-02-07 02:40:13 Cogon
我想查询所有'Crops'
及其'Price'
区域名称中最新的'Cogon'
。
这是我使用的最后一个查询:
SELECT ID, Crop, Area, MAX( DateUpdated )
AS Latest, DateUpdated, Price
FROM crops
WHERE Area = TRIM( 'Cogon' )
GROUP BY Area, Crop;
在这本书中,我想用最新的价格把所有的作物都放在“Cogon”里
上面的语法输出“Cogon”中的所有作物。但是,它不会输出洋葱的最新价格(ID 14),而是输出较旧的数据(ID 9)。您想
按日期订购更新的描述
或按ID订购描述
如果您喜欢怎么办
SELECT Crop,
Area,
DateUpdated,
Price
FROM crops cr
WHERE trim(Area) = 'Cogon'
and
DateUpdated = (select max(DateUpdated)
from crops
where Crop = cr.Crop and trim(Area) = 'Cogon' ) ;
这个问题每天都会被问到,并得到正确的回答,但这并不是说每个答案都是正确的。@草莓从逻辑的角度来看,它应该打印出我想要的输出,但失败了。你能解释一下是哪一部分把它弄得一团糟吗?我不介意。这个问题一直都有答案。@草莓:好的,谢谢你给我时间。我已经试过了按日期更新的描述的顺序,但它仍然输出了旧的一个,即洋葱的ID 9。同样,
ORDER BY ID DESC
也会输出同样的结果。试着颠倒顺序,因此,orderbydateupdated ASC
或orderbyid ASC
。我发誓desc order会给你正确的结果,但相反的顺序会给你正确的结果。你给我的代码工作。先生,如果您有时间,您能解释一下中之后的部分吗?其中Crop=cr.Crop
需要:其中Crop=cr.Crop和trim(区域)='Cogon'
当然;相关子查询部分DateUpdated=(选择…)
与外部查询一样获取作物的最新日期。i、 e,如果在外部查询中crop是洋葱,那么它会查找洋葱的最新日期,并相应地给出结果。@ypercube,这很有意义,因为OP是在“Cogon”区域上共同集中的。换了。谢谢你的指点。我删除了不必要的GROUP BY