2011-10-20 28 views
8

Tôi đã viết các truy vấn sau đây:Chọn kết quả đầu tiên chỉ

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; 

Tuy nhiên nó được đem lại cho tôi câu trả lời sai, nhưng nếu tôi loại bỏ các khoản ROWNUM <= 1, thì câu trả lời chính xác là ở phía trên cùng của tập kết quả .

Vì vậy, tôi có thể thay đổi điều gì trong truy vấn này để làm cho câu trả lời đúng?

Cảm ơn, Alex.

EDIT: Quên để nói rằng tôi chỉ muốn truy vấn trả lại kết quả đầu tiên trong tập kết quả.

+2

Vấn đề là các rownum được gán trước khi dữ liệu được sắp xếp. –

Trả lời

16

Bộ lọc ROWNUM áp dụng trước khi sắp xếp. Những gì bạn cần phải làm điều này là:

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. Liên kết đẹp. Nó không thực sự liên quan, mặc dù, là nó? –

3

Bó rownum nơi trong một truy vấn bên ngoài:

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; 
Các vấn đề liên quan