真的难倒在这里,所以请任何建议。
我在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
答案 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);
当您实际上不想进行分组时,这是根据汇总结果进行选择的最佳方式。