在Select语句Oracle中生成额外记录

时间:2014-12-17 22:47:38

标签: sql database oracle

我希望在我的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子句

1 个答案:

答案 0 :(得分:1)

不确定您是否需要plsql中的答案。

基于以下条件:

  1. 选择min startdt大于12/31/2012的记录
  2. 其中包含“FB”状态的选择记录
  3. 以下是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