2017-06-20 1 views
1

Sorry, wenn der Titel verwirrend scheint, war es das Beste, was ich mir vorstellen konnte.Wie wird jede Instanz gezählt, bei der ein bestimmtes Produkt nach einem anderen Produkt verkauft wurde? SQL oder DAX

Ich kann sowohl mit Excel arbeiten (da Dax seine eine Leistungsabfrage) und sql:

ich eine Situation, wo gibt es zwei Arten Produkt gekauft wird, Type_A und Type_B.

Ich möchte eine Zählung berechnen, wie viele eindeutige Loc_ID einen "Type_A" Produkttyp gekauft haben, NACH dem Kauf eines "Type_B" Produkttyps.

Von meinem Beispiel gibt es insgesamt 3 einzigartige LOC_ID, die in diesem Filter fallen würde: Loc_01, Loc_02 und Loc_04

Jede Hilfe sehr enter image description here

geschätzt

Antwort

1

die Sie interessieren (es funktioniert gut, wenn jeder LOC_ID gekauft beide Arten von Produkten, wie in Ihrem Beispiel.

select count(*) 
from 
(select loc_id , max(date_purchased) dt 
from table t where product_type = 'type_a' 
group by loc_id) a, 
(select loc_id , max(date_purchased) dt 
from table t where product_type = 'type_b' 
group by loc_id) b 
where a.loc_id=b.loc_id and a.dt>b.dt; 
+0

Ich denke, das den Trick tun könnte. Was würde passieren, wenn eine bestimmte loc_id NICHT beide Arten von Produkten gekauft hätte? Es würde das einfach nicht in die Ergebnisse aufnehmen? –

+0

Es würde sie ignorieren. Um diejenigen einzuschließen, die eines der Produkte gekauft haben, ersetzen Sie einfach das "und" in der letzten Zeile durch das Wort "oder" – james5

+0

Danke für die Hilfe! –

1

Dies auch dann funktioniert, wenn bestimmte loc_id nicht beide Arten von products

erworben haben

Versuchen Sie folgendes: -

Select count(a.loc_id) as cnt_locations 
from 
your_table_name a 
inner join 
(
    Select a.loc_id,b.date_purchased,b.Product_type 
    from 
    (
    Select loc_id, min(date_purchased) as date_purchased 
    from 
    your_table_name 
    group by loc_id 
    ) a 
    inner join 
    your_table_name b 
    on a.loc_id=b.loc_id and a.date_purchased =b.date_purchased 
    where Product_type ='Type_B' 
) b 
on 
a.loc_id=b.loc_id 
where a.date_purchased >b.date_purchased and a.Product_type ='Type_A' 
+0

Ich schätze deine Eingabe. –

Verwandte Themen