如何使用 SQL 代码选择不按顺序排列的最新 ID(即使我已对其进行排序)

Posted

技术标签:

【中文标题】如何使用 SQL 代码选择不按顺序排列的最新 ID(即使我已对其进行排序)【英文标题】:How to use SQL code to select the latest ID that is not in order (Even though I have sort it) 【发布时间】:2021-03-05 18:47:47 【问题描述】:

So it is a picture that show my ID that is in order if we assume S2 is bigger S10. The order of my ID is S1, S10, S11, S12, S2, S3, S4, S5, S6, S7, S8, S9

我这样写了我的 SQL 代码,它返回的最新 ID 是 S9 请记住,我想要数字旁边的字母。 那么哪个 SQL 代码允许我选择最新的 ID,即 S12 ?请帮助我。

SELECT IdSoalan FROM SOALAN ORDER BY IdSoalan DESC LIMIT 1

【问题讨论】:

需要有一个列来描述哪个ID在前或在后。 SQL 表本身没有“顺序”的概念。 【参考方案1】:

order by 造成这种情况的原因是因为您的IdSoalan 是一个字母数字数据。 你不应该像典型的ID 那样使用这种类型的数据,但试试这个:

ORDER BY LENGTH(IdSoalan), IdSoalan

这应该使您的数据顺序如下: S1 - S9 然后 S10 - S12 继续。 对于降序形式,只需将desc 放在两者上即可。

ORDER BY LENGTH(IdSoalan) DESC, IdSoalan DESC

【讨论】:

使用与您相同的查询,只需更改 order by 子句。 我尝试在代码后面添加 DESC LIMIT 1 但仍然返回 S9 SELECT IdSoalan FROM SOALAN ORDER BY LENGTH(IdSoalan) DESC, IdSoalan DESC LIMIT 1 确保你有两个desc @SzeYuSim 对我来说有点粗鲁,因为这两个答案完全相同,但很高兴 OP 无论如何都能解决它。【参考方案2】:

试试这个:

SELECT IdSoalan FROM SOALAN ORDER BY LENGTH(IdSoalan) DESC, IdSoalan DESC LIMIT 1

先按列的长度降序排序,再按值降序排序,并将结果限制为1。在mysql中称为自然排序。

【讨论】:

以上是关于如何使用 SQL 代码选择不按顺序排列的最新 ID(即使我已对其进行排序)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Swiftui 中主线程不按顺序排列

XML 反序列化忽略不按字母顺序排列的属性

如何使用 jQuery 更改标签值,而不按类或 ID 选择?

全排列

ORDERBY "human" 使用 SQL 字符串操作的字母顺序

SQL(SQL/Oracle)使用序列从选择语句中插入值