MYSQL获取字母数字排序的最后一条记录

MYSQL获取字母数字排序的最后一条记录,mysql,Mysql,如何获取此表的最后一条记录: id trans_type trans_date reference_no 5804 RFBI 20151214 RFBI-20151214-1 5806 RFBI 20151214 RFBI-20151214-2 5809 RFBI 20151214 RFBI-20151214-3 5814 RFBI 20151214 RFBI-20151214-4 5818 RFBI 20

如何获取此表的最后一条记录:

id  trans_type  trans_date  reference_no
5804    RFBI    20151214    RFBI-20151214-1
5806    RFBI    20151214    RFBI-20151214-2
5809    RFBI    20151214    RFBI-20151214-3
5814    RFBI    20151214    RFBI-20151214-4
5818    RFBI    20151214    RFBI-20151214-5
5822    RFBI    20151214    RFBI-20151214-7
5823    RFBI    20151214    RFBI-20151214-8
5824    RFBI    20151214    RFBI-20151214-9
5825    RFBI    20151214    RFBI-20151214-10
5826    RFBI    20151214    RFBI-20151214-11
5827    RFBI    20151214    RFBI-20151214-12
5828    RFBI    20151214    RFBI-20151214-13
5821    RFBI    20151214    RFBI-20151214-14
5835    RFBI    20151214    RFBI-20151214-15
我可以使用此查询进行排序

SELECT id,`trans_type`,`trans_date`,`reference_no`
FROM (`tbl_transaction` as trans)
WHERE (`trans_type` =  'RFBI'
AND `trans`.`trans_date` =  '20151214')
ORDER BY LENGTH(reference_no), `reference_no`
我需要最后一个参考号

   5835 RFBI    20151214    RFBI-20151214-15
我在想这个问题

SELECT id,`trans_type`,`trans_date`,`reference_no`
FROM (`tbl_transaction` as trans)
WHERE (`trans_type` =  'RFBI'
AND `trans`.`trans_date` =  '20151214')
ORDER BY LENGTH(reference_no), `reference_no` DESC
LIMIT 1
但结果是:

5824    RFBI    20151214    RFBI-20151214-9

您需要按的顺序描述两次:

SELECT id, trans_type, trans_date, reference_no
FROM `tbl_transaction` trans
WHERE `trans_type` =  'RFBI' AND `trans`.`trans_date` =  '20151214'
ORDER BY LENGTH(reference_no) DESC, `reference_no` DESC
------------------------------^
LIMIT 1

您需要按的顺序描述两次:

SELECT id, trans_type, trans_date, reference_no
FROM `tbl_transaction` trans
WHERE `trans_type` =  'RFBI' AND `trans`.`trans_date` =  '20151214'
ORDER BY LENGTH(reference_no) DESC, `reference_no` DESC
------------------------------^
LIMIT 1
您可以这样做:

select id, trans_type, trans_date, reference_no
from tbl_transaction
where trans_type = 'RFBI'
and trans_date = '20151214'
order by id desc 
limit 1
做同样事情的另一种方法是删除最后的实际数字参考号(但性能可能需要注意…我只是提供做同样事情的附加方法)

在上面的方法中,我们利用了引用号由trans_类型和trans_日期以及破折号组成的事实。我们删除这些,只留下数字部分,并将数字转换为无符号整数。我们先按最高值排序,然后取第一个记录

这就引出了一个建议——您能不能在reference\u no列中存储一个整数?这样,您的排序将更加容易,您的存储需求将下降到一个整数(4字节)。你在上面的索引也会更小。当
选择
ing data时,您可以只
concat
trans\u type、trans\u date和参考号。

您可以这样做:

select id, trans_type, trans_date, reference_no
from tbl_transaction
where trans_type = 'RFBI'
and trans_date = '20151214'
order by id desc 
limit 1
做同样事情的另一种方法是删除最后的实际数字参考号(但性能可能需要注意…我只是提供做同样事情的附加方法)

在上面的方法中,我们利用了引用号由trans_类型和trans_日期以及破折号组成的事实。我们删除这些,只留下数字部分,并将数字转换为无符号整数。我们先按最高值排序,然后取第一个记录


这就引出了一个建议——您能不能在reference\u no列中存储一个整数?这样,您的排序将更加容易,您的存储需求将下降到一个整数(4字节)。你在上面的索引也会更小。当
选择
ing data时,您可以只
concat
trans\u type、trans\u date和参考编号。

尝试在您的按区域排序中使用DESC或ASC,然后使用限制0,1可能会有帮助您是否尝试过
按参考编号排序
,如果它将用作某个记录或组集的筛选器/标识符,则需要增强。请尝试在“按区域排序”中使用DESC或ASC,然后使用“限制0,1”可能会有所帮助您是否尝试了“按引用排序”\u no DESC
?我认为列,reference\u no,如果将其用作特定记录或组集的筛选器/标识符,则需要进行增强。