Запрос выберите 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

DEMO

чтобы получить индивидуальные результаты вы можете использовать следующие

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

DEMO

Другие вопросы по тегам