如何获取此表的最后一条记录:
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`
我需要获取最后一个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
答案 0 :(得分:3)
DESC
中需要ORDER BY
两次:
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
答案 1 :(得分: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
另一种做同样事情的方法是删除除了最后的实际数字参考号以外的所有数字(但是性能可能需要注意......我只是提供额外的做法同样的事情)
select id, trans_type, trans_date, reference_no
from tbl_transaction
where trans_type = 'RFBI'
and trans_date = '20151214'
order by cast(replace(reference_no, concat(trans_type,'-',trans_date,'-'), '') as unsigned) desc
limit 1
在上面的这个方法中,我们利用了reference_no由trans_type和trans_date与破折号组合而成的事实。我们删除它们,只留下数字部分并将数字转换为无符号整数。我们按照最高优先级排序并取得第一条记录。
这导致了一个建议 - 你能不能只在reference_no列中存储一个整数?这样,您的排序将变得更加容易,您的存储要求将下降到整数(4个字节)。你的索引也会更小。在select
数据时,您可以concat
trans_type,trans_date和引用号。