从mysql表中选择最大数量

时间:2014-11-23 05:03:24

标签: mysql max

我一直在尝试获取特定产品的最新序列号,以便我可以在管理区域显示下一个可用的序列号。

以下是我一直在尝试的事情

SQL Fiddle

MySQL 5.5.32架构设置

CREATE TABLE IF NOT EXISTS `serials` (
  `sn` varchar(11) NOT NULL,
  `cxid` varchar(11) DEFAULT NULL,
  `itmid` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`sn`)
);

INSERT INTO `serials` (`sn`, `cxid`, `itmid`) VALUES
('7', '00007', 'Name'),
('8', '00008', 'Name'),
('9', '00010', 'Name'),
('10', '00010', 'Name'),
('11', '00010', 'Name'),
('12', '00012', 'Name'),
('13', '00013', 'Name');

查询1

SELECT 
    sn
  FROM serials AS t
INNER JOIN (SELECT MAX(sn) AS one FROM serials where cxid = '00010') AS s ON s.one = t.sn

Results

无论我做什么,我总是得到一个空洞的结果。可能是什么问题?也许有一种更简单的方法?

需要注意的是,我必须仅获取特定产品的序列号,而不是整个表格。

2 个答案:

答案 0 :(得分:1)

您使用的是正确的字段吗? itmid = 0010?不应该是cxid吗?

您也没有与0010匹配的值。您应该使用'00010'。当您使用varchar数据类型时,我相当肯定0010将不等于00010,您应该将其包装在引号中以将其作为字符串进行评估。

最后,sn来自它的外观应该是整数类型。没有它是一个整数,MAX()不会正常工作。如果你确定需要它作为varchar,你可以使用ABS,有一个解决方法:

SELECT MAX(ABS(sn)) AS one FROM serials where cxid = '00010'

答案 1 :(得分:1)

你使用的是错误的字段。

使用此功能:

SELECT sn FROM serials AS t INNER JOIN (SELECT MAX(sn) AS one FROM serials where cxid = '00010') AS s ON s.one = t.sn

您应该使用'00010'代替'0010'。因为您没有与0010匹配的值。