Сначала описание моей задачи. Мне нужно определить клиентов, которые разместили заказы в течение последних 2 лет. Тем не менее, мне нужно подмножество этих записей.
- Необходимо сделать 1 или более заказов между 12-24 месяцами go.
- Пробел, где НЕТ заказов размещаются в течение 1-12 месяцев, а go.
- 1 или более новых заказов были размещены в течение последнего месяца.
Звучит достаточно просто, но Я потратил слишком много времени на изоляцию ограничений без получения желаемого результата.
Вот моя текущая попытка кода:
SELECT * FROM
(SELECT CUSTOMER_ID AS "CUSTOMER", NAME, DATE_ENTERED,
ROW_NUMBER() OVER(PARTITION BY CUSTOMER_ID
ORDER BY DATE_ENTERED desc) SEQ
FROM
A_ATEST
WHERE
DATE_ENTERED >= ADD_MONTHS(TRUNC(sysdate),-24) AND
(DATE_ENTERED >= ADD_MONTHS(TRUNC(sysdate),-1) AND
DATE_ENTERED < ADD_MONTHS(TRUNC(sysdate),-12)) AND
NOT EXISTS(SELECT null FROM A_ATEST WHERE
DATE_ENTERED < ADD_MONTHS(TRUNC(sysdate),-1) AND
DATE_ENTERED > ADD_MONTHS(TRUNC(sysdate),-12))
) a
WHERE
(SEQ = 1 AND
DATE_ENTERED >= ADD_MONTHS(TRUNC(sysdate),-1)) AND
(SEQ = 2 AND
DATE_ENTERED < ADD_MONTHS(TRUNC(sysdate),-12))
SAMPLE DATA: (Я не вижу способа добавить таблицу, вот так ...)
CUSTOMER, NAME, DATE_ENTERED
100 A 08-APR-20
100 A 01-MAR-20
100 A 01-MAR-20
101 B 09-MAR-20
101 B 07-MAR-19
101 B 01-MAR-19
102 C 04-APR-20
102 C 03-JAN-19
102 C 05-JAN-18
В идеале, набор результатов из моего текущего кода должен отображать:
CUSTOMER, NAME, DATE_ENTERED, SEQ
102 C 04-APR-20 1
102 C 03-JAN-19 2
Я не женат на своем коде как это. Я надеюсь, что кто-то может привести меня к лучшему способу подойти к этой задаче.
Спасибо!
-dougbert