Meine Problemstellung war diese:
In einer Tabelle sind Timestamps gespeichert. Diese möchte ich in einer Abfrage (ungern mit einer Function) auf Datumsangaben reduzieren und danach gruppieren. Die Tabelle sieht so aus:
CREATE TABLE public.tabelle ( id SERIAL, timestamp_event TIMESTAMP(0) WITHOUT TIME ZONE, CONSTRAINT tabelle_pkey PRIMARY KEY(id) ) WITHOUT OIDS;
Grundsätzlich lässt sich mit PostgreSQL entweder über extract() oder mit date_part() arbeiten (s. dazu www.postgresql.org/docs/8.3/static/functions-datetime.html). Allerdings lässt sich hier nicht automatisch ein ganzes Datum(im Sinne von „01.04.2012“ sondern nur ein Tag („01“), ein Monat („04“) und ein Jahr („2012“) getrennt ermitteln. Wie bekomme ich das zusammen?
Meine Lösung:
Die einzelnen Datumsbestandsteile lassen sich mit || verketten. Mit ||‘.’|| wird daraus sogar etwas, was wie ein Datum aussieht (aber keines ist, sondern ein String!). Für meinen Anwendungszweck ist das aber vollkommen ausreichend. Das ganze sieht dann so aus:
SELECT count(t.id) as anzahl, date_part('day', t.timestamp_event)||'.'||date_part('month', t.timestamp_event)||'.'||date_part('year', t.timestamp_event) as datum from tabelle t group by datum, anzahl order by 1 DESC, 2 DESC
Vielleicht spart es ja jemandem ein paar Minuten Suche.
Schreibe einen Kommentar