我在SQLFiddle中定义了以下表和行
我需要从产品表中选择两行start_date
和nvl(return_date,end_date)
为1,即当前行的start_date
和上一行的nvl(return_date,end_date)
应该为1
例如PRODUCT_NO TSH098
和PRODUCT_REG_NO FLDG
,END_DATE
为,2012年8月15日和PRODUCT_NO TSH128
和PRODUCT_REG_NO FLDG
start_date
是,2012年8月16日,所以区别只是一天。
如何使用sql获取所需的输出。
任何帮助都是非常明显的。
谢谢
最佳答案
您可以使用 lag
分析函数来访问当前位置之前给定物理偏移量的行。根据您的排序顺序,它可能看起来像这样(虽然不太优雅)。
select *
from products p
join (select *
from(select p.Product_no
, p.Product_Reg_No
, case
when (lag(start_date, 1, start_date) over(order by product_reg_no)-
nvl(return_date, end_date)) = 1
then lag(start_date, 1, start_date)
over(order by product_reg_no)
end start_date
, End_Date
, Return_Date
from products p
order by 2,1 desc
)
where start_date is not null
) s
on (p.start_date = s.start_date or p.end_date = s.end_date)
order by 2, 1 desc
SQL FIddle DEMO