Jump to content
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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...

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
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.

Link zu diesem Kommentar
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).

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...