2016-03-30 17 views
0

Ich habe die unten Abfrage mir die Zählung für jede Ländergruppe durch einzelne Tage zu zeigen, wie 20160101.Oracle Gruppe von Datum, Monat und Jahr

Wie kann ich die folgende Abfrage ändern, so dass es Gruppe von Datum kann, Monat und Jahr?

Bitte beachten Sie, dass derzeit an einer Oracle-Datenbank gearbeitet wird.

Vielen Dank im Voraus.

Select count(1), country_of_sale, substr(datefield,1,8) AS datefield1 
from table 
where country_of_sale IN (‘USA’,’EUROPE’,’ASIA’) 
group by country_of_sale, substr(datefield,1,8) 
order by substr(datefield,1,8) 
+0

Bitte zeigen Sie die Tabellendefinition, Beispieltabellendaten und die erwartete Ausgabe an. – OldProgrammer

+0

Meinst du, dass du alle Daten einzeln *** und *** die Untersumme für jeden Monat *** und *** die Untersumme für jedes Jahr willst? Wie in 'ROLLUP'? Um sicher zu gehen, sollten Sie sowohl einige Beispieldaten als auch die erwarteten Ergebnisse aus diesen Beispieldaten berücksichtigen. – MatBailie

Antwort

1

Wenn datefield ein String ist, dann nur substr() verwenden. Für das Jahr und Monat:

Select count(1), country_of_sale, substr(datefield, 1, 6) AS yyyymm 
from table 
where country_of_sale IN ('USA', 'EUROPE', 'ASIA') 
group by country_of_sale, substr(datefield, 1, 6) 
order by substr(datefield, 1, 6); 

Wenn datefield ein Datum ist, dann to_char() verwenden:

Select count(1), country_of_sale, to_char(datefield, 'YYYY-MM') AS yyyymm 
from table 
where country_of_sale IN ('USA', 'EUROPE', 'ASIA') 
group by country_of_sale, to_char(datefield, 'YYYY-MM') 
order by to_char(datefield, 'YYYY-MM'); 
0

würde es klug sein, spezielle Funktionalität zu nutzen. Das Spiel mit Strings arbeiten, kann aber langsamer und nimmt auch Dinge über Ihre Zeit/Datum Formatierung usw.

Oracle hat eine TRUNC Funktion, die „rundet“ ein Datum auf einen Tag, Monat usw.

Verwandte Themen