场景:
mysql中卡数据有两条,一条是旧的一条新的,现在需要拿到新的一条。
过程:
在select中使用max但是group by不使用同字段可以拿到一条数据,但max仅可以拿到最大字段值,select中其余字段不是max最大字段值所对应的别的字段。因此返出去的值除了max(updatetime)是错的
SELECT * FROM c_card a RIGHT JOIN ( SELECT a.cardNo maxCardNo, a.logid, max(any_value(a.updateTime))maxUpdateTime FROM c_card a GROUP BY a.cardNo, a.peopleID ) b ON a.logid = b.logid
此时logid不是max(updatetime)所匹配值
分析:
groupby再使用having ,max来获取最大时间带不下来(having 条件需要是一个固定值,否则就会类似left join来遍历同一张表以选出符合条件值)
结果:
拿到时间再和相关字段匹配减少失败概率
SELECT * FROM c_card a RIGHT JOIN ( SELECT a.cardNo maxCardNo, max(any_value(a.updateTime))maxUpdateTime FROM c_card a GROUP BY a.cardNo, a.peopleID ) b ON a.updateTime = b.maxUpdateTime and a.cardNo=b.maxCardNo