如何在Oracle中查找将行限制为前1个

时间:2018-10-16 15:57:36

标签: sql oracle oracle11g

如何将输出限制为仅获得ORACLE中的第一行。 我尝试过FETCH first 1 rows only;,但它却给sql无法正确结束的错误消息

当前输出

 70 19-APR-18   Base Line Date
 71 20-JUN-19   Target Date
 73 23-JUN-18   

查询

SELECT  EXEC_TRACKER_SESSION_SEQ,
(CASE WHEN tsm.SESSION_SEQ IS NULL THEN tsm.TAGETDATE ELSE s.SESSION_DATE END) as SESSION_DATE
,tsm.NOTES 
FROM TRACKER_SESSION_MAP tsm
LEFT JOIN session s ON tsm.session_seq = s.session_seq
WHERE tsm.TRACKER_SEQ =244
order by TRACKER_SESSION_SEQ ASC

必需的输出

70  19-APR-18   Base Line Date

2 个答案:

答案 0 :(得分:2)

您需要

WHERE ROWNUM=1

Oracle没有top X函数,但它始终知道rownumber是什么,因此请充分利用。

答案 1 :(得分:2)

rownum=1用作:

select * from
( 
SELECT  EXEC_TRACKER_SESSION_SEQ,
(CASE WHEN tsm.SESSION_SEQ IS NULL THEN tsm.TAGETDATE ELSE s.SESSION_DATE END) as SESSION_DATE
,tsm.NOTES 
FROM TRACKER_SESSION_MAP tsm
LEFT JOIN session s ON tsm.session_seq = s.session_seq
WHERE tsm.TRACKER_SEQ =244
order by TRACKER_SESSION_SEQ ASC
) 
where rownum=1;

或者,您可以将row_number()函数用作:

select * from
(
 SELECT  EXEC_TRACKER_SESSION_SEQ,
(CASE WHEN tsm.SESSION_SEQ IS NULL THEN tsm.TAGETDATE ELSE s.SESSION_DATE END) as SESSION_DATE
,tsm.NOTES, row_number() over (order by day) as rn 
FROM TRACKER_SESSION_MAP tsm
LEFT JOIN session s ON tsm.session_seq = s.session_seq
WHERE tsm.TRACKER_SEQ =244
order by TRACKER_SESSION_SEQ ASC
) 
where rn=1;
只要您使用fetch..rows

Oracle 12c语句就可以使用。