在子查询中排序

时间:2014-10-27 14:32:15

标签: sql oracle

这是我的问题:

select count(1) into isMyCarExists 
    from CAR
    where ID_MODEL = (select ID 
                        from MODEL
                        where TYPE = 'SUV'
                        and rownum <= 1
                        order by DATE_UPDATE desc);

我想count CAR中有多少行拥有DATE_UPDATE desc MODEL的最新版本('SUV')。

通过此查询,我得到ORA-00907: missing right parenthesis ...

我正在使用Oracle数据库10。

2 个答案:

答案 0 :(得分:3)

即使你修复了查询,它也不会做你想要的。 whereorder by之前执行。

如果按递增顺序分配id,那么这应该有效:

select count(*) as isMyCarExists
from car c
where id_model = (select max(id)
                  from model
                  where type = 'SUV'
                 );

或者,使用分析函数:

select count(*) as isMyCarExists
from car c
where id_model = (select m.id
                  from (select m.*, row_number() over (order by date_update desc) as seqnum
                        from model m
                        where m.type = 'SUV'
                       ) m
                  where seqnum = 1
                 );

答案 1 :(得分:1)

首先忘掉那个错误。您的查询功能错误。订单和rownum不会一起使用。

由于您不在12c,您需要先使用order by,然后在外部查询中使用where rownum = 1。另外,在12c中,使用TOP-N查询非常容易fetch first 1 rows only