2014-11-23 6 views
0

Я пытаюсь получить последний серийный номер определенного продукта, чтобы я мог показать следующий доступный серийный номер в моей области администрирования.Выбор максимальной суммы из таблицы mysql

Ниже то, что я пытался

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'); 

Query 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

Я всегда получаю пустой результат независимо от того, что я делаю. Что может быть проблемой? Может быть, есть намного более простой способ?

Следует отметить, что я должен получить серию только определенного продукта, а не всей таблицы.

ответ

1

Вы используете подходящее поле? itmid = 0010? Не должно быть cxid?

У вас также нет значений, соответствующих 0010. Вы должны использовать '00010'. Я довольно уверен, что 0010 не будет равен 00010, когда вы используете тип данных varchar, и вы должны обернуть его в кавычки, чтобы оценить его как строку.

И наконец, sn с внешнего вида должен быть целым. Если он не является целым числом, MAX() не будет работать правильно. Существует обходной путь для этого, если вы уверены, что вам это нужно как VARCHAR вы можете использовать ABS:

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

Обновлен вопрос, чтобы правильно отразить его. Еще не повезло! – Sid

+0

Я не могу добавить значения в sn, если это 'int' – Sid

+0

@Sid Что не работает? Сценарий SQL работает с моим SQL-запросом выше. Вам, похоже, не требуется присоединение, ваше соединение ничего не делает и что вы подразумеваете под добавлением значений? – Devon

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.

+1

@ Sid..try только этот SELECT MAX (ABS (sn)) КАК один из сериалов, где cxid = '00010' –

+0

@RohitJindal, вы действительно не должны добавлять ответы, если только не расширяетесь. Вы, кажется, почти скопировали верхнюю половину моего ответа и просто добавили запрос. – Devon

+0

@ Devon ваш ответ полезен, поэтому я обращаюсь к Сиду, чтобы сделать это. –

Смежные вопросы