Group by zusammen mit dem Typ "time"

Guten Morgen,

ich mache mir schon einige Zeit meine Gedanken, probiere rum und bemühe das Internet komme jedoch zu keinem Ergebnis.

Ich frage mich ob man Spalten die im Typ “time” in einer PostrgreSQL Datenbank liegen auch nach einzelnen Parametern Gruppieren kann.
Das heißt zum Beispiel, dass ich es nach der Stunde Gruppieren möchte.

Also ein kleiner Ausschnitt:

10:37:45
10:48:55
11:46:56


und ich möchte dann so zu sagen ein “group by hour” machen und die dann counten

als wäre das Ergebnis meier Abfrage:

10 | 2
11 | 1

Gibt es da vielleicht ne einfache funktion für?


Gruß BoOnOdY

Ja.

Also ein kleiner Ausschnitt:

Egal, hier ein Bleistift:

test=# create table zeiten (ts timestamptz, wert int);
CREATE TABLE
test=*# commit;
COMMIT
test=# insert into zeiten values ('2007-04-01 10:00:00', 1);
INSERT 0 1
test=*# insert into zeiten values ('2007-04-01 10:30:00', 2);
INSERT 0 1
test=*# insert into zeiten values ('2007-04-01 11:30:00', 3);
INSERT 0 1
test=*# commit;
COMMIT
test=# select extract (hour from ts), sum(wert) from zeiten group by 1;
 date_part | sum
-----------+-----
        11 |   3
        10 |   3
(2 rows)

test=*#



Gibt es da vielleicht ne einfache funktion für?

Ja.

Andreas

Dankeschön :slight_smile:

Sorry, dass ich noch mal störe, aber ich bin noch nicht so ganz fit in SQL.

Hab folgendes probiert:

select extract (hour from dauer) as stunde, count(*)
from call
group by stunde ;

und bekomm im pGadminIII folgende Fehlermeldung:

ERROR: function pg_catalog.date_part(“unknown”, integer) does not exist
TIP: No function matches the given name and argument types. You may need to add explicit type casts.

Muss ich erst diesen date_part katalog installieren? und wenn ja wo bekomm ich den her?

Nein. Funktionen werden am Namen und an den übergebenen Parametern erkannt.

scholl=# select date_part(‘hour’, current_time );
date_part

10


date_part() erwartet einen String mit dem, was extrahiert werden soll (hier ‘hour’) und einem Timestamp.
Ich vermute mal, daß Deine Variable ‘dauer’ kein timestamp ist.

Andreas

Ne die is nur der typ “time” mehr nicht.

Gruß Tim

ERROR: function pg_catalog.date_part(“unknown”, integer)

Hänge mal ein ::time dran.

Andreas

Sorry wo genau ein ::time?

scholl=# select extract(‘hour’ from ‘10:00:00’::time );
date_part

10
(1 row)


Andreas

Bis dahin schon ma vielen Dank :slight_smile: und wie stell ichs jetzt an, dass er mir nicht nur die 10 Uhr dateien anzeigt sondern auch den Rest?

also 10 11 12 und so alles in einer Abfrage?

Außérdem zeigt das immer die gleiche Anzahl an ^^ egal welche Zahl eingebe ^^

Gruß BoOnOdY

Sorry, aber es is a bissl schwer, den Faden zu finden. Kannst Du bitte, möglichst in psql, ein komplettes Beispiel zeigen?


Andreas

Mach ich doch gerne:

select extract (‘hour’ from ‘10:00:00’::time) as stunde, count(*)
from call group by stunde ;


10;642259



select extract (‘hour’ from ‘11:00:00’::time) as stunde, count(*)
from call group by stunde ;


10;642259

Aber ich weiß ganz genau, dass es nicht so ist, da dies die anzahl der gesamten Datensätze ist.

Ich möchte einfach eine Abfrage machen die mir sagt :

200 Datensätze um 10 uhr
306 Datensätze um 11 Uhr
367 Datensätze um 12 Uhr

Damit ich das in Excel kopieren kann und das mir ne Kurve Zeichnet, wann die Rushhour an Datensatzeinträgen ist.

Gruß BoOnOdY

Dir ist nicht aufgefallen, daß da in den Funktionsaufrufen fixe Zeiten stehen und Du ein count(*) machst?
Ich hatte doch ein Beispiel (welches vielleicht nicht sinnvoll war weil 1+2=3 und 3=3 ist, aber welches dennoch funktioniert.

Andreas

Andreas

Sorry das ich mich so doof angestellt habe :astonished:

so funzt es auch
Für nachfolger :

select extract ('hour' from uhrzeit::time), count(*) from call group by 1;