我希望在我的Select语句中为12/31/2012期间的每个唯一F_ID生成记录,以“按该升序排列该F_ID的第一条记录”,状态为FB
(即15960我希望记录
ID = 15960; Status ='FB'; Startdt = 12/31/2012; ENDDT a = 2013年11月14日)
注意:如果在12/31/2012之前已有记录,则无需为该F_ID生成
(例如:16022具有2010年1月1日的记录,因此此F_ID不需要记录)
F_ID STATUS STARTDT ENDDT
----- --------- --------- ---------
15960 NF 11/14/2013 3/3/2014
15960 FB 3/3/2014 12/31/9999
16022 DF 1/1/2010 3/5/2013
16022 FB 3/5/2013 12/31/9999
我记得看过使用UPSERT的Model子句,有没有其他方法没有使用复杂的Model子句,真的很感激帮助。如果没有那么我怎么去使用Model子句
答案 0 :(得分:1)
不确定您是否需要plsql中的答案。
基于以下条件:
以下是sql:
select f_id, 'FB' status, '31-Dec-2012' startdt, min(startdt) enddt from ftest
where f_id in
(select f_id from ftest where f_id in(select oq.f_id from ftest oq where
oq.startdt =(
select min(iq.startdt) from ftest iq
where iq.startdt > to_date('31-DEC-2012','DD-MON-YY')
and iq.f_id=oq.f_id
and iq.startdt = (select min(startdt) from ftest where f_id=iq.f_id)
)) and status='FB') GROUP BY F_ID;
另外,请检查this sqlfiddle