如何在这种情况下获取MySQL中的最后一行?

4

我有一个名为checkdate的表格。

表格结构如下...

Curr_date 

 150120
 160120
 170120
 180120

(日期格式为DDMMYY)

只有一个列是'主键'

现在我想获取表中保存的最新日期或当前日期(它不会总是最后一行)

例如: 最近添加的日期是:010122

那么,记录将显示如下...


Curr_date

010122        <--- The Latest date is on the top
150120
160120
170120



现在怎么在MySQL中获取最后一行添加的数据?在这种情况下?
(注意:'select TOP 1 * from table_name order by Id desc' 不起作用...并且我也想不使用ID列来进行操作...)
编辑:数据类型为字符串。

你可以尝试使用这个,按照当前日期排序 -> 从表名中选择*,按照当前日期降序排列并限制为1条。 - Onkar Musale
如果您在MySQL表模式中为列提供了正确的数据类型,那么它肯定会起作用。@KAKAKAKI - Onkar Musale
实际上,这里的确切问题是如何将字符串转换为日期,因为所选答案选择了它们所有并按转换后的日期排序,正确的答案应该更像是:select date_col from test order by STR_TO_DATE(date_col,'%d%m%Y') desc limit 1; - VBoka
4个回答

4
假设 curr_date 是字符串类型。以下查询适用于您。
select curr_date
       , STR_TO_DATE(curr_date,'%d%m%Y') 
from test 
order by STR_TO_DATE(curr_date,'%d%m%Y') desc;

2
如果您将字符串拆分为其组成部分 YY , MM 和 DD ,则可以按降序(按年份,月份,日期顺序)对每个部分进行排序并获取最新的值:
SELECT *
FROM dates
ORDER BY RIGHT(Curr_date, 2) DESC, SUBSTR(Curr_date, 3, 2) DESC, LEFT(Curr_date, 2) DESC
LIMIT 1

输出:

Curr_date
180120

Demo on dbfiddle


嗨@Nick,如果列是int类型,这将起作用,但如果是varchar类型,则不会:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=8d7dc17fbbfee3bab2a7b424c3ff18f2 - VBoka
@VBoka,您正在尝试将整数插入到varchar列中,当它被解析时,前导0会被剥离。将值转换为字符串即可正常工作:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=2a8e22028ac2b10c5dec10bdc57610df - Nick
1
@VBoka 没问题。感谢您的支持。 - Nick

1

maxgroup by 都可以接受完整的表达式,您可以使用它来重新排列您的字符串,使其正确排序,可以使用字符串操作或解析为正确的日期。

除此之外,如果它是在90年代后建造的,那么您应该将整个内容烧毁并解雇设计它的人。将年份存储为2位数和将事物存储在DMY中都是已知的可怕想法。


1
如果这是一个日期列,这个代码不应该有效吗?
SELECT MAX(Curr_date) FROM table_name

不,那样不行...正如我所解释的,它会先显示更大的数字。但对我们来说,最新的是010122,比110120小。那行不通。 - KAKAKAKI
我不明白,它是一个数字还是日期类型? - VBoka
那是字符串。@VBoka - KAKAKAKI
@KAKAKAKI 嗯...这应该是问题中要说的第一件事 :) - VBoka

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