Как получить отдельные записи на основе флага или самой последней отметки времени обновления? - PullRequest
3 голосов
/ 05 апреля 2020

Я пытаюсь получить записи на основе следующих условий.

Таблица: хранилище

Схема:

create table store (product varchar(50),product_id number,product_type varchar(10),product_flag char(1),product_upd_dt Date);
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',123,'GALA','Y','16-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',123,'GALA','N','16-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',134,'JAZZ','N','16-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',134,'JAZZ','N','14-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',134,'JAZZ','N','15-MAR-20 06.49.05');
insert into store(product,product_id,product_type,product_flag,product_upd_dt)values('Apple',13,'ENVY','Y','15-MAR-20 06.49.05');
commit;

1) Из этого я хочу получить product_id, основываясь на product_flag = 'Y'

2) Если product_flag равен 'N', то получить самый последний обновленный product_id.

3) Один продукт может быть сопоставлен с одним и тем же product_id, но разными product_types.

4) Можно повторить одну и ту же строку, но разница в product_upd_dt

Вот пример.

Входное изображение

enter image description here

Вот ожидаемый результат -

Выходное изображение

enter image description here

Заранее спасибо.

1 Ответ

1 голос
/ 05 апреля 2020

Ах, 1-4 представляют направления, а не отдельные вопросы ... извините, я изначально неправильно понял проблему.

Как насчет этого?

SQL> select product,
  2    product_id,
  3    product_type,
  4    max(product_flag) product_Flag,
  5    max(product_upd_dt) product_upd_dt
  6  from store
  7  where product_id in (select product_id
  8                       from store
  9                       where product_flag = 'Y'
 10                      )
 11  group by product, product_id, product_type;

PRODUCT    PRODUCT_ID PRODUCT_TY P PRODUCT_UPD_DT
---------- ---------- ---------- - ------------------
Apple             134 ENVY       Y 15-mar-20 06.49.05
Apple             123 GALA       Y 16-mar-20 06.49.05
Apple             134 JAZZ       N 16-mar-20 06.49.05

SQL>
...