Abfrage mit Datum von heute und gestern

Hallo,
ich bin noch ziemlicher Neuling bei SQL und habe Probleme bei zwei bestimmten Datenbankabfragen für einen Besucherzähler. Die Ausgabe für die Gesamtbesucher klappt einwandfrei, nur bei der Ausgabe der Besucher für den aktuellen und den gestrigen Tag komme ich nicht weiter. Ich habe schon ewig bei Google gesucht und habe bisher nur das gefunden: SQL : Datumsbereiche ermitteln | Michael Bickel
Nach den Angaben auf der Seite habe ich dann folgendes versucht:

SELECT COUNT(zeit) FROM besucher WHERE zeit = Current_Timestamp

In der Datenbank werden die Besucher nämlich mit dem kompletten Datum gespeichert. Eigentlich sollte das ja dann so funktionieren, dass alle Einträge vom aktuellen Datum zusammengerechnet werden. Aber Wenn ich die Abfrage ausprobiere bekomme ich immer 0 als Ergebnis. Wenn ich das “WHERE zeit = Current_Timestamp” weglasse klappt die Abfrage, nur dann wird alles zusammengerechnet und ich will ja, dass immer nur die Einträge für den aktuellen Tag zusammengerechnet werden.
Was die Abfrage für den gestrigen Besucherstand angeht, klappt der Befehl von der Seite überhaupt nicht und gibt mir nur eine Fehlermeldung aus. Bin echt ratlos, wo liegt bloß der Fehler?

Zeig doch mal bitte ein paar Beispiele für “zeit”.

Zuviel Prosa, zu wenig Fakten.

test=*# insert into besucher values (4, '2009-10-15 11:44:55'::timestamptz);
INSERT 0 1
Zeit: 0,228 ms
test=*# select * from besucher ;
 id |           ts
----+------------------------
  1 | 2009-10-16 11:22:33+02
  1 | 2009-10-16 11:33:44+02
  3 | 2009-10-17 11:45:56+02
  2 | 2009-10-16 11:44:55+02
  4 | 2009-10-15 11:44:55+02
(5 Zeilen)

Zeit: 0,223 ms
test=*# select sum(case when ts::date = current_date then 1 else 0 end) as besucher_heute, sum(case when ts::date = current_date -1 then 1 else 0 end) as besucher_gestern from besucher;
 besucher_heute | besucher_gestern
----------------+------------------
              3 |                1
(1 Zeile)



Aber Wenn ich die Abfrage ausprobiere bekomme ich immer 0 als Ergebnis. Wenn ich das “WHERE zeit = Current_Timestamp” weglasse klappt die Abfrage, nur dann wird alles zusammengerechnet und ich will ja, dass immer nur die Einträge für den aktuellen Tag zusammengerechnet werden.

Bist Du sicher, im richtigen Forum zu sein? das müffelt irknwie nach MySQL …

Was die Abfrage für den gestrigen Besucherstand angeht, klappt der Befehl von der Seite überhaupt nicht und gibt mir nur eine Fehlermeldung aus. Bin echt ratlos, wo liegt bloß der Fehler?

Toll. “gibt mir nur eine Fehlermeldung aus” ist keine Fehlermeldung. Sollen wir diese erraten?

Btw.:
PostgreSQL kann man auch als /dev/glaskugel nutzen:

test=*# select sum(case when ts::date = current_date then 1 else 0 end) as besucher_heute, sum(case when ts::date = current_date -1 then 1 else 0 end) as besucher_gestern, sum(case when ts::date = current_date+1 then 1 else 0 end) as besucher_morgen from besucher;
 besucher_heute | besucher_gestern | besucher_morgen
----------------+------------------+-----------------
              3 |                1 |               1
(1 Zeile)

Andreas

Also bei “zeit” steht dann z.B. folgendes

Zeilen     Zeit        
1          2009-10-16 13:13:48
1          2009-10-16 17:35:48

Ich habe die Fehlermeldung extra weggelassen, da man mit dieser meiner Meinung nach nicht wirklich viel anfangen kann:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘– INTERVAL’+QuotedStr(’1?)+’ DAY’’ at line 1
Die wird auch mit den komischen Zeichen genauso ausgegeben.

Doch, die Fehlermeldung besagt sehr viel: Du verwendest MySQL und bist somit hier falsch.

Tschüß, Andreas

Noch ein Hinweis:

Du solltest nicht mit völliger Abwesenheit von Eigenintelligenz irgend welche Codebeispiele von irgend welchen Internetseiten planlos via Copy&Paste übernehmen und erwarten, daß das dann auch funktioniert. Du hast das simpel von hier kopiert: SQL : Datumsbereiche ermitteln | Michael Bickel , ohne zu erkennen, daß dort offensichtlich kein MySQL behandelt wird. Im übrigen steht da auch:

Zu beachten ist, dass nicht immer alle SQL Server eine identische Syntax haben. Von daher sind u.U. Anpassungen notwendig.

Habe fertig.

Da ist aber einer gut drauf. Denk vielleicht mal dran zurück wie du das erste mal programmiert hast. Ich habe bisher immer angenommen, dass SQL eine einheitliche Sprache ist und MySQL nur eine bestimmte Obefläche dafür ist. (ja, ich weiß du wirst natürlich denken, dass das ja offensichtlich wäre und ich völlig bekloppt bin, dass nicht zu erkennen…) Ich habe kein Problem damit, wenn mich jemand freundlich auf meine Fehler hinweißt und sowas normal erklärt. Da muss man nicht beleidigend werden, nur weil man schon ewig so was macht und alles mögliche kann. Sowas regt mich echt auf. Denk mal drüber nach, wenn du ein Problem in einem bestimmten Fachgebiet hast und in einem Forum nachfragst, würdest du ebenso erwarten, dass die Leute dir normal antworten. So, und jedes weitere Wort ist mir dazu zu schade.

Zu Recht, wie ich denke.
Wir suchen für dich dein Problem, nur um hinterher festzustellen, dass du hier eigentlich völlig falsch bist.


Denk vielleicht mal dran zurück wie du das erste mal programmiert hast.

Da gab es zum Glück noch kein MySQL …



Ich habe bisher immer angenommen, dass SQL eine einheitliche Sprache ist und MySQL nur eine bestimmte Obefläche dafür ist.

Genau für diesen Zweck wurde SQL auch geschaffen, da hast du Recht. Aber halt dich fest: die Finnen spielen Gallier.
MySQL ist berüchtigt dafür, sich nicht sonderlich an den SQL-Standard zu halten. Diverse Funktionalitäten, die man eigentlich über die meisten Datenbanken hinweg nutzen kann, erfordern immer wieder einen Sonderweg für MySQL.

Von daher: wenn du portabel programnmieren möchtest, such dir eine andere Datenbank aus. Für PosgreSQL z. B. bist du dann gleich im richtigen Forum.



Ich habe kein Problem damit, wenn mich jemand freundlich auf meine Fehler hinweißt

Ich hatte so etwas erwartet,. daher meine (wiederholte) Frage nach den Timestamp Beispielen.
Jetzt weißt du ja, was falsch ist. Musst dich entscheiden, ob du bei MySQL bleibst oder etwas richtiges einsetzt.

Was würdest Du denn in einem BMW Forum erwarten, wenn Du dort jemanden fragst wie man einen Lada repariert? Haben doch beide einen Verbrennungsmotor und 4 Räder…