在使用sql查询MAX作为条件
开发中错误sql
SELECT
x.prs_max_otime,
MAX(x.prs_max)
FROM
data_cimiss_min_201911 x
MAX的是最大值,但是x.prs_max_otime不是最大值对应的时间,而是撞到的第一个时间值
正确sql
SELECT
x.prs_max_otime,
x.prs_max
FROM
data_cimiss_min_201911 x WHERE x.prs_max = (SELECT MAX(prs_max) FROM data_cimiss_min_201911 )
子查询关联
具体原因跟数据库和max函数的机理有关。
据说是mysql的于处理器做了优化,将max函数计算出来的值,使用一个常数值代替。
这样的话,相当于我们执行的是:select data ,1234 from mytable.
所以数据库返回了第一个撞到的值。
翻了下官方的reference,发现查max记录的语句全都是用的subquery(子查询),类似如下:
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);