thunderbird 10 Geschrieben 1. Januar 2009 Melden Teilen Geschrieben 1. Januar 2009 Hallo! Ich möchte eine Abfrage schreiben, komme aber irgendwie nicht weiter... Gegeben ist eine Tabelle mit folgenden Spalten: datum / hostname / anzahl Darin wird jede halbe Stunde abgelegt, wie viele User auf einem Server angemeldet sind. Die Einträge sehe also so aus: 31.12.2008 14:30:02 / srv1 / 10 31.12.2008 14:30:07 / srv2 / 4 31.12.2008 15:30:01 / srv1 / 9 31.12.2008 15:30:05 / srv2 / 6 01.01.2009 19:30:05 / srv1 / 5 01.01.2009 19:30:09 / srv2 / 3 Mit der Abfrage möchte ich auslesen wie viele User maximal an einem Tag pro Server angemeldet waren. Die Ausgabe sollte wie folgt sein: 31.12.08 / srv1 / 10 31.12.08 / srv2 / 6 01.01.09 / srv1 / 5 01.01.09 / srv2 / 3 Die Lösung wird ganz einfach sein, nur fällt sie mir im Moment leider nicht ein... Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 1. Januar 2009 Melden Teilen Geschrieben 1. Januar 2009 Das hängt auch ein weng von den Datentypen in der Datenbank ab. Wenn Du z.B. alles als String bzw. varchar abgelegt hast, hat Du ein Problem. In der SQL-Sprache gibt es div. Techniken, die korrekten Datentypen vorausgesetzt, um Deine Aufgabenstellungen zu erfüllen. z.B. um den größten Wert in einer Spalte zu betimmen: SELECT MAX(A.A_PREIS) As [teuerster-Artikel] FROM ARTIKEL As A Siehe GROUP BY und Aggregatfunktionen zum Auswerten von Daten Das müsstest Du nun noch mit einer Where-Klausel ergänzen, die die Abfrage auf das geünschte Datum einschränkt. Das Datumsfeld müsste dann z.B. vom Typ "datetime" sein: Erste Normalform: Atomare Attribute, keine wiederholenden Gruppen, Festlegen von Datentypen -Zahni Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 1. Januar 2009 Melden Teilen Geschrieben 1. Januar 2009 Unter der Annahme, dass "datum" den Datentyp DateTime und "anzahl" den Typ Int haben, sollte die folgende Abfrage zum gewünschten Ergebnis führen SELECT CONVERT(varchar, datum, 104) AS datum, hostname, SUM(anzahl) AS anzahl FROM <TabellenName> GROUP BY CONVERT(varchar, datum, 104), hostname ORDER BY CONVERT(datetime, CONVERT(varchar, datum, 104)), hostname Zitieren Link zu diesem Kommentar
thunderbird 10 Geschrieben 1. Januar 2009 Autor Melden Teilen Geschrieben 1. Januar 2009 SELECT CONVERT(varchar, datum, 104) AS datum, hostname, SUM(anzahl) AS anzahl FROM <TabellenName> GROUP BY CONVERT(varchar, datum, 104), hostname ORDER BY CONVERT(datetime, CONVERT(varchar, datum, 104)), hostname Vielen Dank, funktioniert super! Anstatt SUM() musste ich MAX() nehmen, ich möchte ja nur den Maximalwert. Das ORDER BY hat er so auch nicht akzeptiert, weil es nicht im GROUP BY vorkomme. "ORDER BY CONVERT(varchar, datum, 104)" funktioniert, obwohl das wahrscheinlich dann nicht richtig sortiert wird weil es ein varchar ist. Noch eine Frage: Wieso muss man CONVERT nehmen? Ich habe es mit DAY(datum) versucht und das ging nicht. Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 1. Januar 2009 Melden Teilen Geschrieben 1. Januar 2009 Das mit dem Maximum hab ich wohl überlesen... Und der Rest kommt vom fehlenden SQL-Server zum Test :o Mach aus dem GROUP BY CONVERT(varchar, datum, 104), hostname in meinem Query ein GROUP BY CONVERT(datetime, CONVERT(varchar, datum, 104)), hostname Warum das ganze, wird im ersten Link von zahni erklärt Zitieren Link zu diesem Kommentar
ZeroKnowledge 11 Geschrieben 2. Januar 2009 Melden Teilen Geschrieben 2. Januar 2009 Das mit dem Maximum hab ich wohl überlesen...Und der Rest kommt vom fehlenden SQL-Server zum Test :o . . . Warum das ganze, wird im ersten Link von zahni erklärt Streich meinen Verbesserungsversuch, das kann so natürlich nicht funktionieren. Man sollte sowas nicht an einem 01.01. schreiben, wenn man es nicht selber getestet hat... :rolleyes: Also die erste Abfrage von mir wird ohne Fehler ausgeführt (SQL-Express + Visual Studio). Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.