我试图根据存储在varchar数据类型的列FTE_TMUSD
中的一定数量来列出前3条记录
下面是我尝试过的查询
SELECT *FROM
(
SELECT * FROM FSE_TM_ENTRY
ORDER BY FTE_TMUSD desc
)
WHERE rownum <= 3
ORDER BY FTE_TMUSD DESC ;
我得到了
972,9680,963
->不会在desc中显示的FTE_TMUSD值
我期望一个o / p将显示值的前3个记录
答案 0 :(得分:0)
应该有效;内联视图按FTE_TMUSD
降序排列,您正在从中选择值。
看起来可疑的是您指定为结果的值。看来FTE_TMUSD
的数据类型是VARCHAR2
(啊,是的-是的,您是这么说的)。这意味着值是按字符串而不是数字排序的-似乎您期望数字。因此,将TO_NUMBER
应用于该列。请注意,如果列中除了数字以外的任何内容(例如,如果值972C
),它将失败。
此外,查询的替代方法可能是使用分析功能,例如row_number
:
with temp as
(select f.*,
row_number() over (order by to_number(f.fte_tmusd) desc) rn
from fse_tm_entry f
)
select *
from temp
where rn <= 3;