2011-10-20 31 views
8

he escrito la siguiente consulta:Seleccionar el primer resultado sólo

SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL 
FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL 
       FROM PURCHASE GROUP BY CLIENTNO) TOTALS 
WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO AND ROWNUM <= 1 
ORDER BY TOTALS.TOTAL DESC; 

Sin embargo, me está dando la respuesta equivocada, pero si quito la cláusula ROWNUM <= 1, entonces la respuesta correcta es en la parte superior del conjunto de resultados .

¿Qué puedo cambiar en esta consulta para que produzca la respuesta correcta?

Gracias, Alex.

EDITAR: Me olvidé de decir que solo quiero que la consulta devuelva el primer resultado en el conjunto de resultados.

+2

El problema es que se le asigna el rownum antes se ordena el conjunto de datos. –

Respuesta

16

El filtro ROWNUM se aplica antes de la clasificación. Lo que hay que hacer es lo siguiente:

SELECT * FROM (
    SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL 
    FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL 
        FROM PURCHASE GROUP BY CLIENTNO) TOTALS 
    WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO 
    ORDER BY TOTALS.TOTAL DESC 
) 
WHERE ROWNUM <= 1 
+0

http://stackoverflow.com/questions/7753936/fetching-data-using-rownum-in-oracle/7754076#7754076 – rahularyansharma

+0

@rahularyansharma. Buen enlace. En realidad, no está relacionado, ¿verdad? –

3

Envolver el rownum donde en otra consulta externa:

select * from (
SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL 
FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL FROM PURCHASE GROUP BY CLIENTNO) TOTALS 
WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO ORDER BY TOTALS.TOTAL DESC) 
where ROWNUM <= 1; 
Cuestiones relacionadas