MAX()没有在MySQL中显示预期的结果

时间:2012-05-03 15:20:37

标签: mysql

真的难倒在这里,所以请任何建议。

我在clients表中,我有ID = 257的客户的以下记录:

SELECT ref, ID, client_name, data_1 FROM clients WHERE ID = 257

+------+-----+-------------+--------+
| ref  | ID  | client_name | data_1 |
+------+-----+-------------+--------+
| 1123 | 257 | Client257   | 0      |
| 1124 | 257 | Client257   | 163    |
+------+-----+-------------+--------+

现在,如果我向ref字段添加一个简单的MAX(),我得到:

SELECT MAX(ref), ID, client_name, data_1 FROM clients WHERE ID = 257

+------+-----+-------------+--------+
| ref  | ID  | client_name | data_1 |
+------+-----+-------------+--------+
| 1124 | 257 | Client257   | 0      |
+------+-----+-------------+--------+

我应该得到:

+------+-----+-------------+--------+
| ref  | ID  | client_name | data_1 |
+------+-----+-------------+--------+
| 1124 | 257 | Client257   | 163    |
+------+-----+-------------+--------+

有人可以解释一下吗?我该怎么做才能得到理想的结果?

修改

根据@Ilion的要求添加了SHOW CREATE TABLE clients的输出:

CREATE TABLE `clients` (
 `ref` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `ID` int(11) unsigned NOT NULL,
 `client_name` varchar(75) DEFAULT NULL,
 `data_1` int(11) unsigned NOT NULL DEFAULT '0',
 `last_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 UNIQUE KEY `ref` (`ref`)
) ENGINE=MyISAM AUTO_INCREMENT=1135 DEFAULT CHARSET=utf8

3 个答案:

答案 0 :(得分:3)

SELECT ref, ID, client_name, data_1 FROM clients WHERE ID = 257 ORDER BY ref DESC LIMIT 1

MAX()会显示该列的最大值 。然后Mysql从第一行中提取剩余的数据。

相反,此查询将确保您获得具有最高ref

数据

答案 1 :(得分:2)

这有帮助吗?

SELECT ref, ID, client_name, data_1 FROM clients WHERE ID = 257 and ref in
    (select max(ref) from clients WHERE ID = 257)

答案 2 :(得分:0)

你试过一个条款吗?这应该有效:

SELECT ref, ID, client_name, data_1 FROM clients WHERE ID = 257 having max(ref);

当您实际上不想进行分组时,这是根据汇总结果进行选择的最佳方式。