Durch den Einsatz-Fall scheint es besser, den Code zu teilen.
Erstellen Sie eine Tabelle month_brand auf die folgende Abfrage basiert:
select to_char(transaction_date, 'YYYY-MM') as yyyymm
,brand
,count (distinct unique_mem_id) as count_distinct_unique_mem_id
from source.table
group by yyyymm
,brand
;
Registriert month_brand mit Ihrem Quelltabelle:
select t.transaction_date, t.brand, t.Description, t.Amount, t.Amount/m.count_distinct_unique_mem_id as newval
from source.table as t
join month_brand as m
on m.yyyymm = to_char(t.transaction_date, 'YYYY-MM')
where t.description ilike '%Criteria%'
;
Statt count(distinct ...)
, 2-Phasen-Lösung:
- gibt Zeilennummern an die dupliziert unique_mem_id
- Zählung nur die unique_mem_id mit row_number = 1
select *
into temp.table
from (SELECT transaction_date, brand, Description, Amount,
(Amount/count(case rn when 1 then unique_mem_id end) over (partition by to_char(transaction_date, 'YYYY-MM'),brand)) as newval
FROM (SELECT transaction_date, brand, Description, Amount,unique_mem_id
row_numner() over (partition by to_char(transaction_date, 'YYYY-MM'),brand,unique_mem_id) as rn
FROM source.table
)
)
WHERE DESCRIPTION iLIKE '%Criteria%'
;
können Sie Probe Eingang und Ausgang – Nikhil
Ich versuche wirklich zu fragen, wie man Führen Sie eine Count Distinct-Berechnung mit PostgreSQL durch. – ZJAY
'Partition von to_char (transaction_date, 'YYYY-MM')' Sie müssen nicht in char konvertieren, verwenden Sie einfach date_trunc: 'Partition von date_trunc ('Monat', transaction_date)' – wildplasser