从带有前缀的MYSQL表中选择最大的数字

6
我有一张表格,不幸的是,我不能以任何方式修改它,只能使用现有的内容。这个mysql表格有一个标签为“customer_id”的字段。它由两个前缀字母和一个四位数的数字组成。
例如:BI8392、HE8492、WO1293等。
如何选择带有特定前缀的最大数值?例如,假设我想选择具有HE前缀的最大数字,我该如何选择该值?
非常感谢您的帮助。我已经卡了一段时间了。

是的,它们是左对齐填充的。 - user1011713
6个回答

6

由于所有的值都是左对齐的,所以您可以这样做:

SELECT RIGHT(MAX(customer_id), 4) max_val
  FROM table1
 WHERE customer_id LIKE 'HE%'

请确保你在customer_id上有索引,根据列名来看你可能已经有了。使用LIKE时很可能会用到它。

这里是一个SQLFiddle演示


2
SELECT LEFT(customer_id,2) AS PREFIX,
       MAX(RIGHT(customer_id,4)) AS MAX
FROM table1
GROUP BY LEFT(customer_id,2)

SQL Fiddle

MySQL 5.5.32 Schema Setup:

CREATE TABLE Table1
    (`customer_id` varchar(6))
;

INSERT INTO Table1
    (`customer_id`)
VALUES
    ('DD1234'),
    ('DD1222'),
    ('EE2345'),
    ('EE6789')
;

查询1:

SELECT LEFT(customer_id,2) AS PREFIX,
       MAX(RIGHT(customer_id,4)) AS MAX
FROM table1
GROUP BY LEFT(customer_id,2)

结果:

| PREFIX |  MAX |
|--------|------|
|     DD | 1234 |
|     EE | 6789 |

编辑:

SELECT MAX(RIGHT(customer_id,4)) AS MAX
FROM table1
GROUP BY LEFT(customer_id,2)
WHERE LEFT(customer_id,2) = 'HE'

@inflagranti 你的意思是什么? - Fabien TheSolution
@inflagranti。OP正在寻找MAX值,而不是按数字列出值...另外,如果您正在寻找特定的最大值,请将“GROUP BY”更改为适合您需求的“WHERE”子句。 - wiscWeb
是的,有数十个这些带前缀的字母。是否有办法仅返回最大值的“HE”前缀?顺便说一下Fabien,这真是太棒了。非常感谢您的帮助。 - user1011713
忘了我的问题吧,我忘记了它总是4位数字值。因为一般来说,表示数字的变长字符串的最大值并不等于最大数字。 - Janick Bernet
@OP 去掉GROUP BY子句,用WHERE LEFT(customer_id,2) = 'HE'替换它。 - wiscWeb

1

使用:

SELECT MAX(RIGHT(customer_id,4)) AS max fROM table_name 
    WHERE LEFT(customer_id,2)='HE'; 

忘记了 'HE' 的 where 子句。 - wiscWeb

0
在SQL Server中,您可以执行子字符串操作,然后进行ORDER BY排序,但需要将其转换为十进制数(否则它将按照Varchar排序,例如999将大于1000)。
  SELECT SUBSTRING(MyColumn,3, LEN(MyColumn) - 2 ) 
  FROM dbo.MyTable
  ORDER BY CAST(SUBSTRING(MyColumn,3, LEN(MyColumn) - 2 ) as decimal) DESC;

上面的数字3是指前缀长度为2个字符的情况。 因此,数字2是用来找到没有前缀的字符串长度。


0
如果您的前缀长度相同,可以这样做:
例如:
SELECT MID(column_name,start[,length]) FROM table_name;

已填写:

SELECT MID(customer_id,2,4) FROM table_name;

0

示例数据:

mysql> SELECT * FROM Document;
+--------+-------------+
| DataID | Description |
+--------+-------------+
|      1 | BI8392      |
|      2 | HE8492      |
|      3 | HE8493      |
|      4 | HE8490      |
+--------+-------------+

查询:

SELECT MAX(SUBSTR(Description,3)) FROM Document
WHERE SUBSTR(Description,1,2) = 'HE';

返回:

+----------------------------+
| MAX(SUBSTR(Description,3)) |
+----------------------------+
| 8493                       |
+----------------------------+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接