Вот мой сценарий:Как исключить отдельные разделы из аналитического запроса?
Для ID = 1, cheese_year_seqno из , один из ее строк имеет код поставщика в XX поэтому я хотел бы чтобы exclue все SEQNO но keept в ряды для ранжирования. Если в то время year_seqno нет ни одного продавца XX, сделайте все строки доступными для ранжирования.
Поскольку ID = 2 не имеет кода поставщика XX, все его строки должны быть доступны для ранжирования.
with cheese_row as
(
select 1 as cheese_id, '201111' as cheese_year_seqno, 2 as cheese_lot, 1 as cheese_batch, 'AA' as cheese_vendor,trunc(sysdate-356) as cheese_batch_date from dual union all
select 1 as cheese_id, '201111' as cheese_year_seqno, 2 as cheese_lot, 2 as cheese_batch, 'BB' as cheese_vendor,trunc(sysdate-356) as cheese_batch_date from dual union all
select 1 as cheese_id, '201111' as cheese_year_seqno, 2 as cheese_lot, 3 as cheese_batch, 'XX' as cheese_vendor,trunc(sysdate-350) as cheese_batch_date from dual union all
select 1 as cheese_id, '201222' as cheese_year_seqno, 1 as cheese_lot, 1 as cheese_batch, 'AA' as cheese_vendor,trunc(sysdate-856) as cheese_batch_date from dual union all
select 1 as cheese_id, '201222' as cheese_year_seqno, 1 as cheese_lot, 2 as cheese_batch, 'DD' as cheese_vendor,trunc(sysdate-830) as cheese_batch_date from dual union all
select 2 as cheese_id, '201333' as cheese_year_seqno, 2 as cheese_lot, 3 as cheese_batch, 'CC' as cheese_vendor,trunc(sysdate-300) as cheese_batch_date from dual union all
select 2 as cheese_id, '201333' as cheese_year_seqno, 1 as cheese_lot, 1 as cheese_batch, 'AA' as cheese_vendor,trunc(sysdate-301) as cheese_batch_date from dual union all
select 2 as cheese_id, '201444' as cheese_year_seqno, 1 as cheese_lot, 1 as cheese_batch, 'DD' as cheese_vendor,trunc(sysdate-290) as cheese_batch_date from dual
)
select cheese_id,
cheese_year_seqno,
cheese_lot,
cheese_batch,
cheese_vendor,
cheese_batch_date,
rank() over (partition by cheese_id
order by cheese_batch_date desc,
cheese_batch desc,
cheese_lot desc) as ch_rank1
from cheese_row
/* If a cheese_year_seqno has cheese_vendor = XX then exclude the whole
cheese_year_seqno, but return all other batch seqno.
Rank the remaining cheese_year_seqno rows.
In this case the 20111 year_seqno has an XX as a cheese_vendor,
therefore return and rank only the two rows with 201222 year_seqno.
*/
Желаемые результаты:
Return
ID SEQNO LOT BA VEN DATE RNK1
---- -------- ---- ---- ----- ----------- ------
1 201222 1 2 DD 17-JUN-12 1
1 201222 1 2 AA 22-MAY-12 2
2 201444 1 1 DD 09-DEC-13 1
2 201333 2 3 CC 29-NOV-13 2
2 201333 1 1 AA 28-NOV-13 3