在这种情况下,如何找到下一个值

问题描述 投票:0回答:1

所以有点复杂。

我们在ERP系统中有一个 "报告"。这就像一个大的查询从几个表... 但是,它不是那么重要,我猜。我们有成千上万的行。

这只是一个例子。

enter image description here

我如何搜索 "下一个传单号"?所以,如果项目在传单2015C和2016C中,我想得到 "扩展传单"。

这里的逻辑是:如果项目在实际的传单中,+1 =就是 "Extended flyer"。

2015C: 20 实际年份。15 是传单的编号。C 是传单的类型。

日期是从2008年到今天。所以我不能只计算数值(有很多项目有很多传单)。

也许可以用 LAG/LEAD ?

现在我使用这个查询,但它不准确(自连接)。

decode(null,
  (select count(*) 
   from --my_actual_table g
   where g.id = id 
   and g.place_of_delivery = place_of_delivery 
   and g.partner = partner
   and g.date <= date and g.date >= date-22 
   group by g.id, g.place_of_delivery, g.partner 
   having count(*) > 1 ),
null,'Extended flyer')

有什么更好的方法吗?

sql oracle oracle11g aggregate erp
1个回答
0
投票

我已经创建了一些表,其中只有一列:传单.和查询看起来像。

Select flyer,
case when to_number(substr(flyer,3,2))-to_number(substr(previous_flyer,3,2))=1 then 'Extended' else ' ' end
from
(
 Select flyer, 
 LAG(flyer,1) over (order by flyer) as previous_flyer
 from stackoverflow_table
)

检查过了,它的工作,我得到一个输出:

2015C    
2017C    
2018C   Extended
2019C   Extended
2021C    
2023C    
2024C   Extended
2025C   Extended
2027C    
2029C    
2030C   Extended
© www.soinside.com 2019 - 2024. All rights reserved.