2017-12-02 8 views
0

Ich bin nicht einmal sicher, ob ich diese Frage richtig stelle. Algorithmisch weiß ich, was ich tun möchte, kenne aber die entsprechende Syntax in SQL nicht.Summenspalte Gesamt basierend auf Kriterien sql

Ich habe eine Tabelle erstellt, die die gesamten Online-Sitzungszeiten nach Kundennummer, IP, Sitzungsstartzeit und Gesamtdauer der Sitzung enthält. Hier ist ein Beispiel dafür, was diese Tabelle aussieht (ip und CustNo ist maskiert, auch nicht sicher, wie man Tabellen so die Seltsamkeit entschuldigen):

CustNo minDate     maxDate     ClientIp timeDiff 
123456 2017-11-14-02:39:27.093 2017-11-14-02:39:59.213 1.1.1.1 0.000372 

ich dann eine andere Tabelle erstellen für eine bestimmte Art von Aktivität suchen und möchte wissen, wie lange dieser bestimmte Benutzer diese IP für diese bestimmte Aktivität verwendet hat. Die zweite Tabelle enthält jede Aktivität als separate Zeile, customerID, IP und einen Zeitstempel.

Bis hierhin kein Problem und die Tabellen sehen gut aus.

Ich muss jetzt das Teil schreiben, das in der ersten Tabelle basierend auf Kunden-ID und IP suchen wird, dann summiere die gesamte Nutzung dieser IP für diesen Kunden, solange Sitzung Min Startzeit ist weniger als die Aktivitätszeit, aber ich habe keine Ahnung wie man das macht. Hier ist die aktuelle Funktion (funktioniert offensichtlich nicht). Ich mache eine linke Verbindung, weil es möglich ist, dass dies eine neue IP sein wird und es möglicherweise nicht in der ersten Tabelle ist.

Ich bekomme hier einen Aggregatfunktionsfehler, aber ich weiß nicht, wie ich das überhaupt angehen soll.

+1

Sie sollten wahrscheinlich den genauen Fehler, den Sie erhalten, sowie einige Beispieldaten und erwartetes Ergebnis für diese Daten enthalten, um Ihre Frage zu stellen klarer. –

+0

Was ist der Fehler? und würden Sie bitte Beispieldaten für die zweite Tabelle bereitstellen? – sia

+0

Wurde Ihre Frage bereits beantwortet? – Nikolaus

Antwort

1

Sie haben eine SELECT * (alle Spalten zurückgeben) und eine Aggregatfunktion (In diesem Fall SUM). Wenn Sie bestimmte Spalten für die Rückgabe zusammen mit aggregierten, zusammengefassten Werten kombinieren, müssen Sie jede in der SELECT-Klausel in der GROUP BY-Klausel angegebene Spalte festlegen. Zum Beispiel

SELECT 
    A, B, SUM(C) as CSum 
FROM 
    Table 
GROUP BY 
    A, B 
0

In Ursache der wenigen Informationen, kann ich keine perfekte Lösung, aber ich werde es versuchen:

Zuerst wurde, wie Alan erwähnt, müssen Sie nur Spalten auswählen dass Sie für Ihre Aggregatfunktion benötigen, die CustommerNo und Ip ist. Um die Summen der Abfrage zu erhalten, müssen Sie es wie folgt gruppieren:

Verwandte Themen