Это мой 1-й пост на форуме. Обычно я мог найти то, что мне нужно, но, честно говоря, я не совсем уверен, как задать правильный вопрос. Поэтому, пожалуйста, примите мои извинения, если на форуме уже есть ответ, и я пропустил его.Oracle SQL-Flag записи на основе даты записи против истории
Я бегу следующий код в базе данных Oracle с помощью донного Software:
SELECT
T1."REGION"
, T1."COUNTRY"
, T1."IDNum"
, T1."CUSTOMER"
, T1."BUSSINESS"
, T3."FISCALYEARMONTH"
, T3."FISCALYEAR"
, SUM(T4."VALUE")
,"HISTORICAL_PURCHASE_FLAG"
FROM
"DATABASE"."SALES" T4
, "DATABASE"."CUSTOMER" T1
, "DATABASE"."PRODUCT" T2
, "DATABASE"."TIME" T3
WHERE
T4."CUSTOMERID" = T1."CUSTOMERID"
AND T4."PRODUCTID" = T2."PRODUCTID"
AND T4."DATEID" = T3."DATEID"
AND T3."FISCALYEAR" IN ('2016')
AND T1."COUNTRY" IN ('ENGLAND', 'France')
GROUP BY
T1."REGION"
, T1."COUNTRY"
, T1."IDNum"
, T1."CUSTOMER"
, T1."BUSSINESS"
, T3."FISCALYEARMONTH"
, T3."FISCALYEAR"
;
Этот запрос дает мне информацию о сделках. Как вы можете видеть выше, я хотел бы добавить столбец с именем «HISTORICAL_PURCHASE_FLAG».
Я бы хотел, чтобы запрос взял ЗАКАЗЧИК и FISCALYEARMONTH. Затем я хотел бы проверить, есть ли какие-либо транзакции, зарегистрированные для ЗАКАЗЧИКА, до двух лет в прошлом.
Так позволяет сказать, что я получаю следующий результат:
LineNum REGION COUNTRY IDNum CUSTOMER BUSSINESS FISCALYEARMONTH FISCALYEAR VALUE HISTORICAL_PURCHASE_FLAG
1 Europe ENGLAND 255 Abraxo Cleaner Co. Chemicals 201605 2016 34,567.00
2 Europe FRANCE 123 Metal Trade Heavy 201602 2016 12,500.00
3 Europe ENGLAND 255 Abraxo Cleaner Co. Chemicals 201601 2016 8,400.00
LineNum 1 показывает сделку по Abraxo уборщик Co. зарегистрирована на 201605. И LineNum 3 также для Abraxo чистого Co., но зарегистрированные на 201601. Что я потребуется выполнить запрос, должен обозначить LineNum 1 как «Существующий». Потому что была зарегистрирована предыдущая транзакция.
С другой стороны, LineNum 3 был зарегистрирован впервые для Abraxo Cleaner Co., поэтому строка будет помечена как «Новая».
Подводя итог, я хотел бы, чтобы каждая строка данных обрабатывалась индивидуально. И проверить, есть ли какие-либо предыдущие записи данных для CUSTOMER & FISCALYEARMONTH - 24 месяца.
Заранее благодарю за помощь.
есть несколько способов сделать это. У вас может быть подзапрос для извлечения данных для нового столбца, или мой предпочтительный метод будет заключаться в создании функции, которая делает тяжелый подъем, и называть это как часть SELECT. Вы также можете сделать что-то с операторами CASE, но это усложнит. Кроме того, ваш столбец financial_year действительно является строкой?числовое значение будет лучше. – davegreen100
«2 года в прошлом» от настоящего времени или от FISCALYEARMONTH? – Mottor
Запрос сужает транзакции с 2016 года только для этих стран: 'AND T1." COUNTRY "IN ('ENGLAND', 'France')'. Вы хотите проверить, есть ли какие-либо предыдущие записи ** ** только для этих двух стран ** или для любой страны <> ENGLAND & FRANCE? – krokodilko