Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Schleife über Datumsfeld

  Alt 3. Nov 2005, 18:35
Hallo ihr beiden.

Beim ersten Problem von Tom ist mir nicht ganz klar, wie das Datum gespeichert ist. In DATE-Feldern steht das Datum bei DBase immer in der Form YYYYMMDD. Da zwei- und vierstellige Jahreszahlen vorliegen, gehe ich davon aus, dass Jahr und Monat bereits in einzelnen Spalten abgelegt sind. Trotzdem sei noch darauf hingewiesen, dass beim Zugriff über LOCALSQL nur über echte Spaltenwerte aggregiert werden kann, berechnete Felder sind nicht zulässig. Ist also das Datum in einem DATE-Feld gespeichert, dann muss die Tabelle für die Auswertung entweder erweitert werden:

SQL-Code:
alter table umsatz
  add jahr smallint,
  add monat smallint

update umsatz set
  jahr = extract(year from datum),
  monat = extract(month from datum)
Oder man muss mit einer local view arbeiten. Dazu speichert man folgende view definition in einer Datei UMSATZ.SQL:

SQL-Code:
select extract(year from datum) as jahr,
  extract(month from datum) as monat, menge
from umsatz
Anschließend führt man dann die eigentliche query aus:

SQL-Code:
select jahr, monat, sum(menge) as summe
from "umsatz.sql"
group by jahr, monat
order by jahr, monat
Wenn die Spalten JAHR und MONAT bereits in der Basis-Tabelle existieren, dann kann man statt der local view natürlich gleich die Tabelle verwenden:

SQL-Code:
select jahr, monat, sum(menge) as summe
from umsatz
group by jahr, monat
order by jahr, monat
Die zwei-und vierstelligen Jahreszahlen müssen zuerst normiert werden. Das kann so geschehen:

SQL-Code:
update umsatz
set jahr = jahr + 1900
where jahr between 6 and 99

update umsatz
set jahr = jahr + 2000
where jahr between 1 and 5
Im Programm sollte für die Normierung besser eine Parameter-Query verwendet werden, da meine Festwerte im kommenden Jahr ein falsches Ergebnis produzieren würden.

Grüße vom marabu
  Mit Zitat antworten Zitat