2

我想使用这种类型的查询从数据库中提取“最后”插入的记录

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...,可能是数据库或其他问题?

4

4 回答 4

3

好吧,SEG_NUM 存储为“字符串”类型(VARCHAR2 或其他)。

将列类型设置为NUMBER,排序就可以了。

于 2012-06-11T13:04:44.547 回答
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;
于 2012-06-11T13:04:49.697 回答
2
ORDER BY TO_NUMBER(A.SEG_NUM) DESC;
于 2012-06-11T13:07:20.700 回答
1

在你的情况下,问题似乎是 SEG_NUM 是 varchar。所以它对待 10 比 2 低。

这样做——

ORDER BY to_number(A.SEG_NUM) DESC
于 2012-06-11T13:05:54.873 回答