不幸的是,我有一张桌子,我无法以任何方式改变,必须使用我所拥有的。
mysql 表有一个标记为“customer_id”的字段。它有 2 个前缀字母和一个 4 值数字。
例如:BI8392
HE8492
WO1293
如何选择具有特定前缀的最大数值?例如,假设我想选择前缀为 HE 的最大数字。如何选择该值?
绝对感谢任何帮助。我已经被困了一段时间了。
不幸的是,我有一张桌子,我无法以任何方式改变,必须使用我所拥有的。
mysql 表有一个标记为“customer_id”的字段。它有 2 个前缀字母和一个 4 值数字。
例如:BI8392
HE8492
WO1293
如何选择具有特定前缀的最大数值?例如,假设我想选择前缀为 HE 的最大数字。如何选择该值?
绝对感谢任何帮助。我已经被困了一段时间了。
由于所有值都已填充,因此您可以执行
SELECT RIGHT(MAX(customer_id), 4) max_val
FROM table1
WHERE customer_id LIKE 'HE%'
确保您有一个索引customer_id
,您可能会根据列的名称对其进行索引。LIKE
很可能会使用它。
这是SQLFiddle演示
SELECT LEFT(customer_id,2) AS PREFIX,
MAX(RIGHT(customer_id,4)) AS MAX
FROM table1
GROUP BY LEFT(customer_id,2)
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'
利用:
SELECT MAX(RIGHT(customer_id,4)) AS max fROM table_name
WHERE LEFT(customer_id,2)='HE';
如果您的前缀具有相同的长度,您可以这样做:
前任。
SELECT MID(column_name,start[,length]) FROM table_name;
填写:
SELECT MID(customer_id,2,4) FROM table_name;
样本数据:
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 |
+----------------------------+
在 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 是查找不带前缀的字符串的长度。