У меня есть пример базы данных, и я пытаюсь найти новых против постоянных клиентов.Ниже приведена ссылка на образец базы данных, которую я создал:
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=aa24ab7ce5136ab99a66efbc5414968f
Я хотел бы объединить две таблицы, чтобы получить следующий результат:
табличное изображение, пожалуйста, посмотрите
Это был мой оригинальный пост, в котором я хотел просто получить новых и старых клиентов:
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=e7fbb96a2d269e37d1436e178d523066
Логика в том, что я пытаюсь получить новых клиентов за текущий период из таблицы транзакций, которые раньше не совершали транзакции.Затем я рассчитываю повторяющихся клиентов, которые осуществили операции в текущем периоде, но также и в прошлом.Теперь я хотел бы получить данные в формате, который я прикрепил в виде картинки.В основном группируем данные по мужчинам и женщинам, их количество клиентов в каждом сегменте, общие расходы, количество транзакций и количество, которое они приобрели.
ниже приведен код, который у меня есть, но у меня есть одна запись втаблица, которая не является новым клиентом, но когда я запускаю этот код, он дает мне это лицо в качестве нового клиента:
select gender,
case when age < 18 then '<18'
when age between 18 and 24 then '18-24'
when age between 25 and 32 then '25-32'
when age between 33 and 39 then '35-39'
when age between 40 and 46 then '40-46'
when age between 47 and 53 then '46-52'
when age between 54 and 60 then '53-58'
when age > 60 then '61+' end as AgeGroup
, count(distinct individual_id) indiv
, count (distinct transaction_number) txn_count
, sum(dollar_value_us) as Spend
, sum(quantity),
CASE WHEN MIN(txn_date) = min_txn_date THEN 1 ELSE 0 END is_new
from (SELECT
DISTINCT a.individual_id,
a.dollar_value_us,
a.txn_date,
a.quantity,
a.transaction_number,
b.gender,
b.age,
MIN(txn_date) OVER(PARTITION BY a.individual_id) min_txn_date
FROM transaction_detail_mv a
join gender_details b on a.individual_id = b.individual_id
WHERE
a.brand_org_code = 'BRAND'
AND a.is_merch = 1
AND a.currency_code = 'USD'
AND a.line_item_amt_type_cd = 'S')
where txn_date >= TO_DATE('10-02-2019', 'DD-MM-YYYY')
AND txn_date < TO_DATE('17-02-2019', 'DD-MM-YYYY')
group by gender,
case when age < 18 then '<18'
when age between 18 and 24 then '18-24'
when age between 25 and 32 then '25-32'
when age between 33 and 39 then '35-39'
when age between 40 and 46 then '40-46'
when age between 47 and 53 then '46-52'
when age between 54 and 60 then '53-58'
when age > 60 then '61+' end,
individual_id,
min_txn_date
Проблема с этим кодом заключается в том, что он не группирует возрастные диапазоны.поэтому, если есть 2 мужчины в возрасте до 1 года, которые возвращаются клиентами, это дает мне две записи, и мне нужно только 1.