sql - Select语句Oracle中生成额外记录

标签 sql database oracle

我想在 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 中的答案。

基于以下条件:

  1. 选择 min startdt 大于 12/31/2012 的记录
  2. 从中选择包含“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/

相关文章:

sql - Linq to SQL 中的动态表名

php - 从 PHP 库中调用函数并显示查询结果

html - 在 JSP 中搜索数据库

java - 对单个 derby 数据库的多次访问

SQL 查询从列中获取空值计数

mysql - 如何设计用于访问不同位置的表

php - MySQL查询结果中某项的顺序

sql - 对除主键之外的所有列定义 UNIQUE 约束是一个好主意吗?

java - Oracle插入或更新或抛出异常

java - 使用 JAVA 在数据库中存储日期/时间信息?