Lupuz.de: Artikel-Portal / Magazin

Zurück   Postpla.net - die Forum Community > PC, Internet und Technik > Coder's Area

[SQL] Timestamps pro Datum/Std zählen

Anzeigen:

Thema geschlossen
 
Themen-Optionen Thema durchsuchen
gagget
Alt 28.02.2007, 22:41   #1
Standard [SQL] Timestamps pro Datum/Std zählen

Man stelle sich eine Tabelle mit nur einem Feld 'timestamp', das Unix Zeitstempel enthält, vor. Nun würde ich gern zählen, wieviele timestamps (für z.B. einen Tag/Datum) vorhanden sind. Das funktioniert auch mit folgender Abfrage recht gut.
Code:
SELECT 
    FROM_UNIXTIME(timestamp,"%Y-%m-%d") as date,
    COUNT(timestamp) AS count  
FROM table GROUP BY date ORDER BY date ASC
Die Abfrage liefert z.b. folgendes Ergebnis:
Code:
2007-02-01     21
2007-02-02     15
2007-02-04     2
2007-02-05     6
In dieser Datenmenge fehlt aber ein, für mich wichtiger, Eintrag,
nämlich der für 2007-02-03. Da für diesen Tag kein Stempel vorhanden ist wird der Tag auch nicht ausgeben. Ich bräuchte diesen Tag allerdings.
Daher brauch ich eine Abfrage die folgendes Ergebnis leifert:
Code:
2007-02-01     21
2007-02-02     15
2007-02-03     0     <= wichtig !
2007-02-04     2
2007-02-05     6
Kann mir evtl hierbei jemand helfen ? Ich hoffe, ich hab das Problem ausreichend beschrieben.
 
 
Nach oben
ANSI Lady
Alt 23.03.2007, 10:50   #2
Standard

ich versteh Dich nicht...

Wie willst Du eine Abfrage machen die Werte ausgibt welche gar nicht vorhanden sind ? Du müsstest das im Frontend lösen...

ODER:

Deine Datenbank muss um 0:00 Uhr einen Datensatz anlegen der dem jeweiligen Datum entspricht. Dann musst Du aber um 1 dekrementieren. D.h. Wenn EIN eintrag vorhanden ist hast Du einen count von 0, sind 2 Einträge vorhanden hast Du einen Count von 1, usw...

ODER:

Du schaust Dir das mal an...
Scheint wohl möglich zu sein eine Art Schleife in SQL zu erzeugen... Oracle macht das jedenfalls. Halt mich bitte auf dem laufenden !

Geändert von ANSI Lady (23.03.2007 um 11:04 Uhr).
 
 
Nach oben
Sidolin
Alt 23.03.2007, 14:26   #3
Standard

Ich bezweifle dass das in purem Sql geht, weil es ja eigentlich nicht die Aufgabe einer Datenbank ist, Werte auszugeben die gar nicht drin sind.

Das mit jeden Tag um 0:00h nen Datensatz anzulegen ist auch irgendwie sehr hässlich und wird vermutlich Probleme geben.

Ich würd das ganze halt in die Ausgabelogik einbauen, da sollte das doch auch eigentlich hin.
 
 
Nach oben
ANSI Lady
Alt 24.03.2007, 19:18   #4
Standard

Das mit jeden Tag um 0:00h nen Datensatz anzulegen ist auch irgendwie sehr hässlich und wird vermutlich Probleme geben.
Naja, es ist weder häßlich, noch wird es Probleme machen...

Am besten eine StoredProcedure mit schicken Date-Abfragen... Man guggt einfach ob für gestern ein Eintrag existiert und wenn nicht legt man halt einen timestamp für gestern an...
 
 
Nach oben
gagget
Alt 25.03.2007, 17:29   #5
Standard

Das Problem is zwar mittlerweile vom Tisch, aber ihr habt schon recht, rein mit SQL lässt sich das nicht lösen. Erst recht nicht wenn noch ein wenig Kompatibilität zu anderen DB Systemen als MySQL gewährleistet sein soll.

Gelöst hab ichs auf folgende Art:

1. Eine Funktion die zu einem Datum (z.B. 2007-03-22) das nächste gültige Datum ausgibt (also 2007-03-23).

2. Eine 'foreach' Schleife die alle Ergebnisse der SQL Abfrage durchgeht.

3. Eine weitere 'while' Schleife in der 'foreach' Schleife, wo kontrolliert wird, ob sich zwischen dem zuletzt bearbeiteten Datum und dem aktuellen Datum (also das aktuelle Datum der foreach Schleife) noch eine Lücke befindet, wenn ja wird ein Datensatz (also ins array) mit dem fehlenden Datum und dem Wert 0 eingesetzt.

Zum Schluss hab ich dann ein Array mit den Daten wie ich sie auch brauche. Sonderlich schön gelöst find ich es aber nicht, wäre also immernoch für eine bessere Lösung dankbar.
 
 
Nach oben
Wodar Hospur
Alt 26.03.2007, 13:23   #6
Standard

Naja, Stored Procedures sollten mittlerweile bei allen Datenbanken funktionieren. Aber eleganter ist es wahrscheinlich mit Triggern(funktionieren mittlerweile auch bei vielen Systemen).

Du lässt bei dem ersten neuen Eintrag über einen Trigger überprüfen ob es von Gestern überhaupt ein Datum gibt, Falls nicht fügst du es ein. Sodurch könnte das ganze sogar rekursiv ablaufen falls du mehere Tage hintereinander nichts hast.
 
 
Nach oben
Anzeigen:
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche



Alle Zeitangaben in WEZ +2. Es ist jetzt 03:47 Uhr.


Lupuz.de - wir können auch anders!
©1998 - 2008, Lupuz:Information-Network
Powered by vBulletin Version 3.7.1 (Deutsch), Jelsoft Enterprises Ltd.
Grüne Links?

SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.