Oracle 获取前三行:with子句

Oracle 获取前三行:with子句,oracle,plsql,Oracle,Plsql,我有以下疑问: with TEMPRESULT AS ( select CONTACTS.line_id , count(*) totalcount from CONTACTS where (((E_DATE-S_DATE)*24*60*60)<=60 and to_char(S_DATE,'YYYY-MM-DD')='2015-12-12') group by CONTACTS.line_id order by totalcount DESC

我有以下疑问:

with TEMPRESULT AS 
(
    select CONTACTS.line_id , count(*) totalcount
    from CONTACTS
    where (((E_DATE-S_DATE)*24*60*60)<=60 and to_char(S_DATE,'YYYY-MM-DD')='2015-12-12') 
    group by CONTACTS.line_id
    order by totalcount DESC
)  

我希望TEMPRESULT只保存select返回的前三行,怎么做

您可以在rownum上指定一个条件:


如果您使用的是oracle 12c,则可以先使用fetch

WITH TEMPRESULT AS
  (SELECT CONTACTS.line_id ,
    COUNT(*) totalcount
  FROM CONTACTS
  WHERE (((E_DATE-S_DATE)*24*60*60)<=60
  AND TO_CHAR(S_DATE,'YYYY-MM-DD')  ='2015-12-12')
  GROUP BY CONTACTS.line_id
  ORDER BY 2 DESC
  FETCH FIRST 3 rows only
  )
SELECT * FROM tempresult
WITH TEMPRESULT AS
  (SELECT CONTACTS.line_id ,
    COUNT(*) totalcount
  FROM CONTACTS
  WHERE (((E_DATE-S_DATE)*24*60*60)<=60
  AND TO_CHAR(S_DATE,'YYYY-MM-DD')  ='2015-12-12')
  GROUP BY CONTACTS.line_id
  ORDER BY 2 DESC
  FETCH FIRST 3 rows only
  )
SELECT * FROM tempresult