Bitte um kleine SQL-Hilfe

Ronald Nickel

Legendäres Mitglied
Hallo Ayomler

Meine SQL-Anfrage:
Gib die Anzahl aller Datensätze(statistik_id as count_impressions) die an einem bestimmten Tag (myDateVariable) eingetragen wurden, gruppiert nach Stunden. Es sollte doch eigendlich ein recordcount von 24 erscheinen der die Anzahl (value) der in der jweiligen Stunde getätigten Einträge aufzeigt. Leider ist da aber irgend ein Hund drin.


Mein statement:
SELECT statistik_timestamp,count(statistik_id) as count_impressions FROM statistik
where date(statistik_timestamp) =date(#myDateVariable#)
group by DATE(statistik_timestamp)



Könnte mir da mal bitte ein DB-Profi helfen?

Gruß Ronny
 
Hi,

ich bin mir nicht sicher, wie Deine Daten abgelegt sind, aber Du willst vermutlich eher nach "DATE_FORMAT(statistik_timestamp,'%H')" gruppieren und auch im Select-Teil muß das wahrscheinlich statt statistik_timestamp eingefügt werden.
 
Also dieses Staement gibt mir die anzahl der besagten Einträge tageweise (derv letzten 7 tage) aus. Und das funktioniert.

SELECT statistik_timestamp,count(statistik_id) as count_impressions FROM statistik
WHERE TO_DAYS(NOW()) - TO_DAYS(statistik_timestamp) <= 7
group by DATE(statistik_timestamp)

seltsam seltsam ...
 
QUOTE group by DATE(statistik_timestamp)

Ist ja auch logisch, da wird jeweils das Datum in der Form '2006-11-10' zurückgegeben und danach gruppiert. Wenn Du das jetzt so lässt(als mit der DATE-Funktion) und Deine Where-Clause "date(statistik_timestamp) =date(#myDateVariable#)" einsetzt, hat jeder Wert "group by DATE(statistik_timestamp)" das gleiche Datum(nämlich das, das in myDateVariable gesetzt ist). Du willst aber ja jetzt die Stunden haben und deshalb mußt Du auch nach der Stundenzahl gruppieren. Die Stundenzahl bekommst Du eben über "DATE_FORMAT(statistik_timestamp,'%H')"

Ich würde es so probieren:

CODE SELECT statistik_timestamp,count(statistik_id) as count_impressions FROM statistik
where date(statistik_timestamp) = "2006-11-11"
group by DATE_FORMAT(statistik_timestamp,'%H')

Oder so:

CODE SELECT DATE_FORMAT(statistik_timestamp,'%H'),count(statistik_id) as count_impressions FROM statistik
where date(statistik_timestamp) = "2006-11-11"
group by DATE_FORMAT(statistik_timestamp,'%H')

Da bin ich mir jetzt grad nicht so recht sicher.
 
SELECT statistik_timestamp,count(statistik_id) as count_impressions FROM statistik
where date(statistik_timestamp) =date(#currentdate#)
group by DATE_FORMAT(statistik_timestamp,'%H')

funktioniert aber leider nicht
Als recordcount gibt es "17" zurück. Ich denke mal 17 verschieden Stunden in denen Insert erfolgten.

so ein sch....

Gruß Ronny
 
QUOTE Als recordcount gibt es "17" zurück. Ich denke mal 17 verschieden Stunden in denen Insert erfolgten.

So wirds sein. In den restlichen Stunden wurden halt keine Inserts vorgenommen. Das könntest Du dann ja scriptseitig abfangen, wenn kein Eintrag für eine Stunde zurückgegeben wird. Da ist count_impressions eben "0"
 
Als Alternative könntest Du Dir eine neue Tabelle "Stunden" mit einem Feld "Stunde" anlegen. Diese müsste dann genau 24 Records enthalten, von 1 bis 24 (oder 0 bis 23, je nachdem). Mit dem richtigen Join zwischen dieser Tabelle und dem Group-Select, müsstest Du einen Record für jede Stunde des Tages erhalten, unabhängig davon, für welche Stunden tatsächlich Statistikdaten vorhanden sind. Wichtig ist nur, dass der Join stimmt, sodass auf jeden Fall *alle* Records aus der Stundentabelle selektiert werden.

Griessli
Irene
 
Zurück
Oben