6

不幸的是,我有一张桌子,我无法以任何方式改变,必须使用我所拥有的。

mysql 表有一个标记为“customer_id”的字段。它有 2 个前缀字母和一个 4 值数字。

例如:BI8392

HE8492

WO1293

如何选择具有特定前缀的最大数值?例如,假设我想选择前缀为 HE 的最大数字。如何选择该值?

绝对感谢任何帮助。我已经被困了一段时间了。

4

6 回答 6

6

由于所有值都已填充,因此您可以执行

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

确保您有一个索引customer_id,您可能会根据列的名称对其进行索引。LIKE很可能会使用它。

这是SQLFiddle演示

于 2013-09-03T20:25:49.167 回答
2
SELECT LEFT(customer_id,2) AS PREFIX,
       MAX(RIGHT(customer_id,4)) AS MAX
FROM table1
GROUP BY LEFT(customer_id,2)

SQL小提琴

MySQL 5.5.32 架构设置

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'
于 2013-09-03T20:18:13.570 回答
1

利用:

SELECT MAX(RIGHT(customer_id,4)) AS max fROM table_name 
    WHERE LEFT(customer_id,2)='HE'; 
于 2013-09-03T20:15:09.847 回答
0

如果您的前缀具有相同的长度,您可以这样做:

前任。

SELECT MID(column_name,start[,length]) FROM table_name;

填写:

SELECT MID(customer_id,2,4) FROM table_name;
于 2013-09-03T20:15:14.217 回答
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                       |
+----------------------------+
于 2013-09-03T20:22:01.950 回答
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 是查找不带前缀的字符串的长度。

于 2016-06-21T14:11:34.027 回答