我希望获取varchar列的最大值,它必须是唯一的,这就是为什么我要获取最大值并递增它的原因。
例如,我在tbl_check中遇到这样的情况:
+---------------+
| check_up_id |
-----------------
| 1-0 |
| 1-2 |
| 11-1 |
| 111-3 |
| 12-4 |
| 52-5 |
| 1-6 |
| 1-7 |
| 3-9 |
| 3-8 |
| 3-11 |
| 3-10 |
+---------------+
在我的check_up_id中,考虑到我增加了id的右侧(1- **),这是不符合顺序的。现在我不想要的是如何查询以获得右侧的最大值。只考虑右侧,在这种情况下,我有时在左侧有3个或2个数字,或者有时只有一个数字。我想要的是返回右边的最大值。在我的例子中,我想在我的查询中返回3-11。忽略增量,因为我将在php端完成它。我想要的是在(-)之后返回右侧的最大值
发布于 2017-06-27 08:52:01
使用:
SELECT MAX(CAST(SUBSTRING_INDEX(check_up_id, '-', -1) AS DECIMAL))
FROM tbl_check
SUBSTRING_INDEX
返回列的子字符串,该列包含由-
字符分隔的指定数量的字段。负计数意味着从右边开始计数,所以这将返回最右边的字段。
要获取包含它的整个字段,请在JOIN
中使用它
SELECT check_up_id
FROM tbl_check
JOIN (
SELECT MAX(CAST(SUBSTRING_INDEX(check_up_id, '-', -1) AS DECIMAL)) as max_right
FROM tbl_check) AS x
ON SUBSTRING_INDEX(check_up_id, '-', -1) = max_right
https://stackoverflow.com/questions/44770730
复制相似问题