Запрос выберите max со смешанной строкой и int
У меня есть таблица, которая содержит столбец для сгенерированного кода, тип данных VARCHAR со смешанными значениями string/int, такими как:
Table demo
ID code
==============
1 | 001qwe
2 | 002qwe
3 | 001asd
Вопрос:
1. Как получить максимальное значение, содержащее qwe
или же asd
Я хочу, чтобы это использовалось в качестве фильтра.
2. Как получить идентификатор строки, содержащей максимальное значение
я хочу что-то вроде:
select *,MAX(SUBSTRING(code, 1, 3)) from demo where SUBSTRING(code, 4, 3) = 'asd'
1 ответ
Решение
Да, длина кода этого случая - 6, а число - 3 цифры в начале данных.
Учитывая выше, вы можете написать свой запрос, как показано ниже
select *,left(`code`,3)
from demo
order by left(`code`,3) * 1 desc
limit 1
чтобы получить индивидуальные результаты вы можете использовать следующие
SELECT a.id qweid, a.code qwecode,b.id asdid,b.code asdcode
FROM
(SELECT id,`code`
FROM demo
WHERE RIGHT(`code`,3) = 'qwe'
ORDER BY LEFT(`code`,3) * 1 DESC
LIMIT 1) a
CROSS JOIN(SELECT id,`code`
FROM demo
WHERE RIGHT(`code`,3) = 'asd'
ORDER BY LEFT(`code`,3) * 1 DESC
LIMIT 1) b