【发布时间】:2015-10-27 20:37:49
【问题描述】:
关于这个问题:How do I grab only the latest Invoice Number
我接受了一个使用 MAX 函数的答案,但 Robert McKee 指出这将导致排序值,例如:
'一种' 'AA' 'AAA' 'AB' '乙'当我需要的是:
'一种' '乙' 'AA' 'AB' 'AAA'我正在尝试找到一种方法来查找最新版本的发票。引用问题的接受答案将在一定程度上起作用。它确实满足了我的问题......但是现在一个新问题值得提出自己的问题,而不是让我回去修改我原来的问题。所以……
我唯一需要处理的是发票编号本身。 发票编号的格式为#####XXX,其中##### 是实际发票编号,XXX 是版本号。 XXX 可以是从“A”到“ZZZ”的任意位置。
这是我试图找到一个可行的解决方法(一个 sql 测试用例):
DECLARE @TempTable TABLE (MyNumber int, MyString varchar(15));
INSERT @TempTable
VALUES (100, 'A'), (100, 'AAZ'), (100, 'B'), (100, 'AZ'), (100, 'C'), (100, 'Z'), (100, 'AA'), (100, 'AB');
SELECT TOP 1
RTRIM(CAST(MyNumber AS NVARCHAR(15)) + MyString) AS InvoiceNumber
FROM @TempTable
ORDER BY RIGHT(LEFT(MyString + SPACE(2), 3), 1) DESC, RIGHT(LEFT(MyString + SPACE(2), 2), 1) DESC, LEFT(MyString, 1) DESC;
有人愿意提供更好的答案或指出我清理我的正确方向吗?
提前致谢,
【问题讨论】:
标签: sql sorting sql-order-by