我想在 2012 年 12 月 31 日期间的每个唯一 F_ID 的 Select 语句中生成记录到“该 F_ID 的第一条记录的 STARTDT”,按升序排列,状态为 FB
(即对于 15960,我想要一个记录
ID = 15960 ;状态 = 'FB'; Startdt = 12/31/2012; ENDDT a= 11/14/2013 )
注意:如果 2012 年 12 月 31 日之前已有记录,则无需为该 F_ID 生成
(例如:16022 有 1/1/2010 的记录,因此此 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
我记得看到 Model 子句使用 UPSERT ,有没有其他方法不使用复杂的 Model 子句,非常感谢帮助。如果没有,我该如何使用 Model 子句
最佳答案
不确定您是否需要 plsql 中的答案。
基于以下条件:
- 选择 min startdt 大于 12/31/2012 的记录
- 从中选择包含“FB”作为状态的记录
以下是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
关于sql - Select语句Oracle中生成额外记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27536277/