如何将输出限制为仅获得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
答案 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
语句就可以使用。