我有一堆sql列要检索。这是我的SQL语句:
SELECT b.iposx_model_id,
a.mrModel, MAX(a.mrRevision) as mrRevision, a.mrApprovedBy, ...
FROM mydb1.tbl_model_revision a
INNER JOIN mydb2.model_from_revision_process b
ON b.mrModel = a.mrModel
WHERE a.mrType = 1
GROUP BY a.mrModel
ORDER BY b.iposx_model_id ASC
在我检索到的某个mrModel列上,这些是我查询的数据:
在我的查询中,它声明我应该使用Max mrRevision获取与第三行对应的数据。
然而,在运行sql语句时,我得到了来自第三行的max mrRevision,它是2。但我获得的其他列数据来自第二行,一个例子是mrApprovedBy,它是1035而不是10.为什么会发生这种情况?
答案 0 :(得分:0)
仅用于参与aggegation函数的列的一部分的use group是select子句 因为工作产生了不可预测的结果而在SQL中被删除了
在大多数数据库和最新版本的mysql中,不允许使用group by
用于获取与最大值对应的行,您可以对匹配正确内容的值使用连接
SELECT
b.iposx_model_id
, a.mrModel
, t.mrRevision
, a.mrApprovedBy
, ...
FROM mydb1.tbl_model_revision a
JOIN (
select mrModel, MAX(mrRevision) as mrRevision
from mydb1.tbl_model_revision
GROUP BY a.mrModel
) t on a.mrModel = t.mrModel and a.mrRevision = t.mrRevision
JOIN mydb2.model_from_revision_process b ON b.mrModel = a.mrModel
WHERE a.mrType = 1
ORDER BY b.iposx_model_id ASC