Я все еще учусь писать, и приведенный ниже запрос не дает мне точных результатов, плюс он также не оптимизирован.
Итак, одна из главных вещей, которые я пытаюсь сделать, - это создать 3 типа дат:
- sales_shift,
- refund,
- sales_reg
в моих наборах данных.Чтобы добиться этого, я делаю союз.
Все 3 набора данных запрашивают один и тот же источник sales_main.Проблема в моем втором наборе данных с 'Refund' в качестве date_type, он не вытягивает фактические строки из-за условия ColumnA = 'B'.
Мне бы хотелось, чтобы этот набор просматривал только те записи, которые были извлечены в первом наборе данных (т. Е. 'Sales_shift' как date_type), а затем применил условие ColumnA = 'B'.как мне это сделать.
Мой 3-й набор данных с 'sales_reg' в качестве date_type должен быть таким же, как 1-й набор, за исключением того, что транзакция_дата не смещена.Как я это сделал.Я думал о том, где существует, но не знаю, как его применить.
Любая помощь будет потрясающей.Большое спасибо
create table sales_refund as select * from (
with table1 as (select 'Sales_shift' as date_type,
add_months(date_trunc('month',transaction_date),1) as event_date,
sku,
sum(sales) as Sales_total,
sum(refund) as Refund_total,
case when region in ('US','EU') then 'type A' else 'type B' end as Flag_field1
from sales_main where transaction_date >= add_months(current_date(),-6)
group by sku,
'Sales_shift'
add_months(date_trunc('month',transaction_date),1),
Flag_field1),
table2 as (select sku,
date_type,
event_date,
Sales_total,
Refund_total,
Flag_field1,
case when Flag_field1 = 'type B' or (Flag_field1 = 'type A' and Sales_total > 20000) then 'Yes' else 'No' end as Flag_field2
from table1 )
Select sku,
date_type,
event_date,
Sales_total,
Refund_total,
Flag_field1
fromm table2 where Flag_field2 = 'Yes' )
union all
select sku,
'Refund' as date_type,
date_trunc('month',refund_date) as event_date,
sum(sales) as Sales_total,
sum(refund) as Refund_total,
'X' as Flag_field1
from sales_main where transaction_date >= add_months(current_date(),-6) and ColumnA = 'B'
group by sku,
'Refund'
date_trunc('month',refund_date),
'X'
union all
select sku,
'Sales_Reg' as date_type,
date_trunc('month',transaction_date) as event_date,
sum(sales) as Sales_total,
sum(refund) as Refund_total,
'Y' as Flag_field1
from sales_main where transaction_date >= add_months(current_date(),-6)
group by sku,
'Refund'
date_trunc('month',transaction_date),
'Y'