Как найти следующее значение в этом случае - PullRequest
0 голосов
/ 20 апреля 2020

Так что это немного сложно.

У нас есть "отчет" в системе ERP. Это как большой запрос из нескольких таблиц ... но, я думаю, это не так важно. У нас есть тысячи строк.

Это всего лишь пример:

enter image description here

Как мне найти «следующий номер флаера»? Таким образом, если элемент находится в флаере 2015 C и 2016 C, я хочу получить "Расширенный флаер".

Логика c здесь: если элемент находится в фактическом флаере +1 = это «Расширенный флаер».

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')

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 20 апреля 2020

Я создал таблицу, состоящую только из одного столбца: флаер. И запрос выглядит так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...