2017-12-20 15 views
0

Ich habe eine Datenbank, die Daten zu Seitenaufrufen für Elemente auf meiner Website enthält. Jede Zeile enthält ein Date, ItemId (GUID-Zeichenfolge) und Views (Int). Es gibt viele Zeilen mit derselben ItemId für verschiedene Daten. Ich möchte all diese Elemente in einer Zeile mit der Summe der Ansichten zusammenfassen. Zum Beispiel:SQL - Gruppierung nach einem Feld und Summierung eines anderen Feldes?

Date     |ItemId        |Views 
2017-12-18 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |1 
2017-12-17 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |3 
2017-12-12 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |5 
2017-12-07 20:18:00 |6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB |1 

würde Ich mag folgendes erhalten:

ItemId        | Views 
6B3B4A9E-B64B-4BAF-9ABA-42F486CC70AB | 10 

Zusätzlich muss ich der Lage sein, nach Datum zu filtern, wie WHERE [Date] between '12/15/2017' and GetDate()

Die Where-Klausel ist leicht genug, , aber wie mache ich die Gruppierung/Summierung? Denken Sie daran, dass ich nicht nur eine ItemId summiere. Ich möchte alle Zeilen gruppieren, in denen die ItemId identisch ist, so dass ich die Summe der Ansichten für jedes Element erhalten kann.

+0

Select ItemId, SUM (Views) aus der Tabelle, wo Date> '2017.12.15' Gruppe von ItemId –

Antwort

2

Nur GROUP BY verwenden:

SELECT 
    ItemId, 
    SUM(Views) AS Views 
FROM yourTable 
WHERE [Date] BETWEEN '2017-12-15' AND GETDATE() 
GROUP BY ItemId; 

Seite beachten, aber here is a link auf die MSDN-Dokumentation beschreibt, was die gültigen Datums-/Zeitliterale für SQL Server sind. Ich bevorzuge das ISO-Format, das ich oben angegeben habe, aber das, was Sie verwendet haben, ist ebenfalls gültig.

+0

Wäre das nicht die Gesamtansicht zählen ändern? Sie würden nur Ansichten zählen, bei denen die Datumsbedingung wahr ist, aber nicht alle Ansichten von ItemId, von denen ich glaube, dass sie gewünscht wurden. – Demo

+0

@Demo Interessanter Punkt. Die erwartete Ausgabe impliziert jedoch, dass keine WHERE-Einschränkung angewendet wurde. Meine Interpretation der Frage war, dass das OP später eine WHERE-Klausel anwenden möchte. –

+0

Wahr. Diese Antwort könnte das sein, was das OP danach gefragt hat. Es hängt davon ab, ob das Datum nur zum Identifizieren der ItemId verwendet wird, und zählt dann alle Ansichten für das angegebene ItemId-Datum, unabhängig davon, ob die Aufrufe innerhalb des angegebenen Datumsbereichs gezählt werden sollen. – Demo

0

Ich denke, dass Sie eine Unterabfrage benötigen, so dass die Gesamtzahl der Ansichten nicht durch die Einschränkung der WHERE-Klausel geändert wird. Etwas wie folgt vor:

SELECT 
    ItemId, 
    sum(Views) as viewCount 
FROM table t1 
WHERE exists (Select itemid From table t2 Where t2.itemid = t1.itemid and [Date] BETWEEN '2017-12-15' AND GETDATE()) 
GROUP BY ItemId; 
Verwandte Themen