我想使用这种类型的查询
从数据库中提取“最后”插入的记录SELECT A.IDOC_NUM, A.SEG_NUM
FROM AGR3PL_LINE A, AGR3PL_IDOC B
WHERE A.IDOC_NUM(+) = B.IDOC_NUM
AND B.IDOC_NUM = '457154' AND B.CREATION_DATE = (SELECT MAX(B.CREATION_DATE) FROM AGR3PL_IDOC B)
ORDER BY A.SEG_NUM DESC;
结果如下:
IDOC_NUM SEG_NUM
457154 9
457154 8
457154 7
457154 6
457154 5
457154 4
457154 3
457154 2
457154 10
457154 1
这是正确的,但是最后输入的是条目10,但正如您所看到的格式结果不好,它可能是10,9,8 ......,这可能是数据库或其他问题的问题吗? ?
答案 0 :(得分:3)
嗯,SEG_NUM存储为"字符串" type(VARCHAR2或其他)。将列类型设置为NUMBER,排序就可以了。
答案 1 :(得分:2)
可能SEG_NUM
是文字类型(例如VARCHAR
),因此不会像数字那样排序。
您可以更改此列的类型(这是最佳解决方案,因为如果它是数字,它应该具有数字类型),或者您可以在执行期间转换此列类型(它可能会降低性能):
SELECT A.IDOC_NUM, A.SEG_NUM
FROM AGR3PL_LINE A, AGR3PL_IDOC B
WHERE A.IDOC_NUM(+) = B.IDOC_NUM
AND B.IDOC_NUM = '457154' AND B.CREATION_DATE = (SELECT MAX(B.CREATION_DATE) FROM AGR3PL_IDOC B)
ORDER BY TO_NUMBER(A.SEG_NUM) DESC;
答案 2 :(得分:2)
ORDER BY TO_NUMBER(A.SEG_NUM) DESC;
答案 3 :(得分:1)
问题似乎是SEG_NUM在你的情况下是varchar。因此它将低于2的10处理。
这样做 -
ORDER BY to_number(A.SEG_NUM) DESC