Mysql 如何使用字符串和Int值选择Max

Mysql 如何使用字符串和Int值选择Max,mysql,Mysql,嗨,我有这张桌子 offer_number training_title ************** ABC-1 SEMINAR ABC-9 SEMINAR ABC-10 SEMINAR ABCD-9 TRAINING EFGH-9 TESTING EFGH-10 TESTING Mysql SELECT *, MAX(offer_num

嗨,我有这张桌子

offer_number      training_title
**************
    ABC-1          SEMINAR
    ABC-9          SEMINAR
    ABC-10         SEMINAR
    ABCD-9         TRAINING
    EFGH-9         TESTING
    EFGH-10        TESTING
Mysql

SELECT *, MAX(offer_number) as offer_number_latest FROM (`training_program`) WHERE `training_title` LIKE '%SEMINAR%' GROUP BY `training_title` ORDER BY `offer_number` desc
我想生产ABC-10 但是 我总是得到ABC-9而不是ABC-10

样本2:

 SELECT *, MAX(offer_number) as offer_number_latest FROM (`training_program`) WHERE `training_title` LIKE '%TESTING%' GROUP BY `training_title` ORDER BY `offer_number` desc  
我需要一个EFGH-10的结果 但是
我总是得到EFGH-9而不是EFGH-10。

如果每个培训标题的报价编号前缀始终相同,则以下(讨厌的)查询将起作用:

select training_title, 
  concat(
    left(offer_number, 
      locate('-', offer_number)
    ), 
    max(
      cast(substring(offer_number, locate('-', offer_number) + 1) as signed)
    )
  ) from offers group by training_title

Mysql还具有子字符串功能

 mysql> select * from offer;
    +--------------+----------------+
    | offer_number | training_title |
    +--------------+----------------+
    | ABC-1        | SEMINAR        |
    | ABC-9        | SEMINAR        |
    | ABC-10       | SEMINAR        |
    | ABC-8        | SEMINAR        |
    | ABC-14       | SEMINAR        |
    | ABC-12       | SEMINAR        |
    +--------------+----------------+
    6 rows in set (0.00 sec)

    mysql> SELECT MAX(CAST(SUBSTRING(offer_number,LOCATE('-',offer_number)+1) AS SIGNED)) as MAX FROM offer ;
    +------+
    | MAX  |
    +------+
    |   14 |
    +------+
    1 row in set (0.00 sec)

    mysql> SELECT * FROM offer ORDER BY CAST(SUBSTRING(offer_number,LOCATE('-',offer_number)+1) AS SIGNED);
    +--------------+----------------+
    | offer_number | training_title |
    +--------------+----------------+
    | ABC-1        | SEMINAR        |
    | ABC-8        | SEMINAR        |
    | ABC-9        | SEMINAR        |
    | ABC-10       | SEMINAR        |
    | ABC-12       | SEMINAR        |
    | ABC-14       | SEMINAR        |
    +--------------+----------------+
    6 rows in set (0.00 sec)

9>1-您必须使用“ABC-09”进行比较,才能这样工作。。相反,您可以从字符串中“提取”数字,并使用它-最简单的应该是“替换(提供数字,'ABC-',''”),以仅获取字符串的数字部分(),然后您可能需要将()转换为数字(或添加+0以使用自动转换)每个组的字符前缀是否始终相同?freddy?对上述问题有何意见?