2017-05-31 3 views
0

ich SQL verwende und hier ist das Szenario, das ich mitSQL-Szenario Gruppe eine Dimension

steckte
Table A 
SubscriptionID | Club | Sum_Of_Billings_Of_All_Month | EventID 


Table B: 
Cost   | EventID 

Table A left join Table B on EventID (Um die Kosten für jedes Abonnement zu verfolgen)

Ergebnis

SubscriptionID | Club | Sum_Of_Billings_Of_All_Month | EventID | Cost 

Ich möchte die Sum_Of_Billings_Of_All_Month in pro Tag Billings zerlegen. für jede Subskription möchte ich die Aufschlüsselung der Abrechnungen pro Tag des Monats. Dafür werde ich group bySum_Of_Billings_Of_All_Month anstelle von subscriptionID.

Consequence

Wenn ich Gruppe von Tagen nach Rechnungsstellung, beim Zusammenfügen ich Duplikate von subscriptionIDs bekommen und die eventIDs wird in Reihen mehrere Zeit dupliziert werden, die dann auch die Kosten mehrfach zählen.

Was ich will:

  • In derselben Abfrage, ich SubscriptionID zur Gruppe der Lage sein will, so kann ich mit ihren Kosten, die einzigartigen Abonnements pro Zeile halten.

  • Aber einer der anderen Voraussetzung ist, dass ich den Zusammenbruch der billings sowie zur Berechnung der Break-even und andere Metriken in derselben Abfrage

Hier ist die tatsächlichen Beispieldaten wissen wollen

Tabelle A

idCustomerSubscription | ClubID |  EventId  | BillingDate| FinalRevenue 
33562784    | 56180001| 5y6m600np1fg | 5/31/2017 | 512 

Tabelle B

EventId   |Cost 
5y6m600np1fg |200 

Tabelle A JOIN B auf eventId (Gruppe von SubscriptionID

idCustomerSubscription |ClubID  |EventId  |BillingDate| FinalRevenue | Cost 
33562784    | 56180001 |5y6m600np1fg| 5/31/2017 | 512  |200 

Es dient dem Zweck verbinden verlassen, weil jedes Abonnement eine Kosten hat, die auf der einzigartigen, aber es ist Andererseits gibt mir diese Art der Abfrage keine Aufschlüsselung der Rechnungsdaten (ich brauche es für die Breakeven-Berechnung)

Tabelle A j Das würde mir die Aufschlüsselung der Daten oin B links von billingdate

idCustomerSubscription| ClubID |EventId   | BillingDate| FinalRevenue |Cost 
33562784    | 56180001| 5y6m600np1fg |5/30/2017   |510   |200  
33562784    | 56180001| 5y6m600np1fg |5/31/2017    |2    |200  

auf eventId (Gruppe beitreten, die ich für Break-even benötigen (510 am 30. und 2 am 31.), aber es werden die Kosten dupliziert (400 machen die Kosten statt 200) kann ich die Anzahl der eindeutigen subcriptions pro Zeile halten und irgendwie eine SQL-Magie will, wo


ich, um herauszufinden, die Abrechnungsdaten der einzelnen Abonnements in derselben Abfrage verfolgen (ohne Gruppierung nach Datum, da die Zeilen dupliziert werden). Ist es möglich ?

Vielleicht eine Art und Weise, wo die Eventids verbunden sind und ihre Gruppierung nach Datum, es verdoppelt nicht die Kosten und zählen nur eine Kosten pro Ereignis?

+1

Beispieldaten und gewünschte Ergebnisse würden wirklich helfen zu vermitteln, was Sie tun möchten. –

+0

Sie sagten, Sie möchten die Sum_Of_Billings_Of_All_Month in pro Tag Billings aufteilen. Also möchten Sie Kalendertage für jeden Monat oder nur Standard 30 folgen. Es wird leicht zu verstehen sein, wenn Sie weitere Beispiele gegeben haben – uSeruSher

+0

aktualisiert die Frage mit Beispiel – PythonDev

Antwort

0

Ich hoffe, Sie erhalten Ihr gewünschtes Ergebnis mit unten Abfrage. Versuchen Sie, Ihre Gruppe durch Operation für Mn (Aliasname) -Tabelle zu ändern.

select mn.idCustomerSubscription,mn.ClubID,mn.EventId,mn.BillingDate,mn.FinalRevenue,sq.cost 
    from tableA Mn left join (select idCustomerSubscription,max(cost) cost, min(billingDate) billingDate from tableA a left join tableB b on a.eventid=b.eventid group by idCustomerSubscription) sq on mn.idCustomerSubscription=sq.idCustomerSubscription and mn.billingDate=sq.billingdate 
group by mn.idCustomerSubscription,mn.ClubID,mn.EventId,mn.BillingDate 
+0

@pythondev einmal überprüfen Sie meine Antwort und lassen Sie mich irgendwelche Probleme kennen – Rams