Chronologische Datenzählung mit einer Query

hoctar

Erfahrenes Mitglied
Hallo,
möchte gerne Daten zu heute, gestern und vorgestern mit nur einer Query auslesen.

Mein Versuch gibt leider nicht das richtige Ergebnis:
SQL:
SELECT count(i1.id) AS today,
       count(i2.id) AS yesterday,
       count(i3.id) AS twoDaysAgo
  FROM periods i1
  JOIN periods i2 ON i2.date::date = '2011-01-16'
  JOIN periods i3 ON i3.date::date = '2011-01-15'
WHERE i1.date::date = '2011-01-17'
 
Zuletzt bearbeitet von einem Moderator:
Da ich nicht genau weiß, welchen Dialekt du verwendest, kann ich dir keine syntaktische Fehlerfreiheit garantieren, aber ich kann dir einen Ansatz geben. Für solche Dinge ist das Group By nämlich hervorragend geeignet:

SQL:
SELECT i.date, count(*)
  FROM periods i
  GROUP BY i.date
  HAVING i.date::date = '2011-01-17' OR i.date::date = '2011-01-16' OR i.date::date = '2011-01-15'

Wie gesagt, das ist jetzt nur ein Ansatz, mit dem du noch rumspielen kannst.

Gruß
Matt
 
Ich verwende PostgreSQL

Die Ausgabe sieht nun folgend aus:
Code:
date	                  count
2011-01-15 02:07:53.585799	1
2011-01-17 16:18:16.982364	1
2011-01-16 15:16:59.396297	1
2011-01-17 23:17:07.485069	1
2011-01-17 21:58:39.352015	1
2011-01-16 08:46:29.076681	1
2011-01-16 09:29:04.198565	1
2011-01-15 23:19:37.124207	1
2011-01-15 23:40:11.745828	1
2011-01-16 14:21:39.255325	1
2011-01-16 13:02:06.124982	1

Gewünschtes Ergebnis wäre eine Zählung der Einträge pro Tag.

Es wird nicht gruppiert. Vllt. macht der Zeitstempel die Einträge einzigartig und somit kann nicht gruppiert werden.
 
Zuletzt bearbeitet:
Ich werfe hier mal eine mySQL Abfrage rein:

SQL:
SELECT COUNT(feld1) AS anzahl, DATE_FORMAT(datum, "%d.%m.%Y") AS datum FROM tabelle GROUP BY DATE_FORMAT(datum, "%d.%m.%Y")

Keine Ahnung ob es als Anregung hilft und ob man das irgendwie auf PostgreSQL übertragen kann.
 
genau.
Dein date musst du auf das Datum kürzen.
In MySQL ist das DATE(datumsfeld)
In Oracle TRUNC(datumsfeld)
in PostgreSQL, keine Ahnung

Sorry tombe, aber die Formatierung kannst du weglassen wenn du einfach DATE() verwendest. Ist einfacher.
 
Ups, ich dachte bei einem als Timestamp definierten Feld muss man die Formatierung angeben.
 
Habs grad getestet um sicher zu sein.
Feldtyp timestamp
DATE(my_timestamp) liefert das Datum.....
 
Sorry :)

Die Lösung:
SQL:
SELECT COUNT(id) AS total, date::date AS day
          FROM periods
         WHERE date::date = '2011-01-17'
            OR date::date = '2011-01-16'
            OR date::date = '2011-01-15'
      GROUP BY day
      ORDER BY day DESC
 
Zuletzt bearbeitet von einem Moderator:
Zurück