[oracle] mal wieder ne komplizierte Abfrage

xnicnacx

Mitglied
Hi liebes Forum
ich habe folgendes Problem: Eine Tabelle hat eine Spalte mit Timestamps und ich würde gerne die Einträge pro Tag zählen. Das ganze soll am Ende dann ungefähr so aussehen:
Code:
Tag     Anzahl
15.4.      52
16.4.      31
17.4.      73

Mit
Code:
select distinct TO_CHAR(timestamp,'dd.MM.') Datum
bekomme ich schon die erste Spalte heraus, ich schaffe es nur nicht in derselben Abfrage auch noch die Anzahl der Einträge rauszuholen. Die Bruteforce-Variante wäre zuerst diese Abfrage abzusetzen und danach in einer Schleife ein count() über die einzelnen Werte zu machen. Das möchte ich aus Performancegründen jedoch gerne vermeiden....
Vielen Dank im Voraus für eure Mühen
Nico
 
SQL:
SELECT DISTINCT TO_CHAR(timestamp,'dd.MM.') Datum, COUNT(Datum) Anzahl
FROM table
GROU BY(TO_CHAR(timestamp,'dd.MM.'));
Vielleicht geht das ja !? Soweit ich weiß geht GROUP BY mit Aliasnamen nicht (zumindest Oracle 9i, laut meiner Oracle Doku)
 
Danke für die schnelle Antwort, scheint leider so nicht zu funktionieren. Oracle beschwert sich über den "unknown identifier Datum"
Hat noch jemand eine Idee?
 
Vielleicht zunächst die Daten umfüllen, so dass aus dem alias eine echte Spalte wird?

1.
sql Code:
  1. CREATE TABLE newdate AS
  2. SELECT DISTINCT to_char(timestamp,'dd.MM.') datum
  3. FROM TABLE;



2.
sql Code:
  1. SELECT datum, count (*)
  2. FROM newdate
  3. GROUP BY datum;
 
wie wars mit:

SQL:
select concat(day(timestamp), ".", month(tomestamp), "."), count(*) from table 
group by timestamp

keine Ahnung ob oracle die Funktionen day und month hat..
falls nein einfach so

SQL:
select TO_CHAR(timestamp,'dd.MM.'), count(*) from table
group by timestamp

sollte klappen, so kompliziert ist das ja nicht.

Gruss
jeipack

PS: ein distinct, sowie das Gruppieren nur nach Tag und Monat könnte das Resultat verändern.
distinct: sollte an einem Tag im letzen Jahr genau gleich viele 'Anzahl' vorkommen dann wird dieser Datensatz nicht angezeigt.
Gruppieren: hier werden alle 'Anzahl' aus allen Jahren an einem bestimmten Tag zusammengezählt.
 
Zuletzt bearbeitet:
Habs geschafft:

Code:
SELECT DISTINCT TO_CHAR(timestamp,'MM.dd.') datum, COUNT(TO_CHAR(timestamp,'MM.dd.')) anzahl FROM Promotioncode 
GROUP BY(TO_CHAR(timestamp,'MM.dd.')) order by datum;

Vielen Dank euch allen
 

Neue Beiträge

Zurück