Seite 1 von 2

Abfrage letzter Einträge

Verfasst: Mi, 06.06.2007 08:55
von emtewe
Ich bin dabei mit Open Office Base eine Datenbank zu basteln, und stehe jetzt vor folgendem Problem:

Ich habe Einträge mit Namen und Datum, und es kann zum gleichem Namen Einträge zu verschiedenen Zeitpunkten geben. Nehmen wir an ich habe folgende Einträge in der Datenbank:

AAA 01.01.01 weitere Daten
DDD 01.01.01 weitere Daten
EEE 01.01.01 weitere Daten
HHH 03.01.01 weitere Daten
DDD 03.01.01 weitere Daten
AAA 04.01.01 weitere Daten
EEE 04.01.01 weitere Daten
AAA 02.01.01 weitere Daten
DDD 05.01.01 weitere Daten

Jetzt möchte ich in einer Abfrage, gefiltert jeweils nur die letzten Einträge zu einem Namen haben, also praktisch diese Liste:

HHH 03.01.01 weitere Daten
AAA 04.01.01 weitere Daten
EEE 04.01.01 weitere Daten
DDD 05.01.01 weitere Daten

von allen Einträgen zu einem Namen jeweils nur der letzte.
Hat jemand eine Idee wie ich das mit Bordmitteln (Sortieren/Filter/SQL) lösen kann.

Ich nutze Open Office 2.2.0 mit interner HSQL.

Gruß
emtewe

Abfragefunktion

Verfasst: Mi, 06.06.2007 13:34
von NTClient
Kann man nicht einfach die Tabelle in den Abfrageebtwurf holen und dann
, dann die beiden Spalten "Name" und "Datum" abfragen und zwar mit den Funktionen: Spalte "Name" gruppiert und die Spalte "Datum" mit Maximum?

Gruß Bernd!

Verfasst: Mi, 06.06.2007 14:25
von emtewe
Hmm, ich kann einen Wert mit dem Format "Datum" irgendwie nicht als Maximum auswählen...

Weder mit dem Abfrage-Assistenten, noch im Entwurfsmodus.

Gruß
emtewe

PS: Habe gerade im Buch "Datenbanken mit OpenOffice.org 2.0" von Thomas Krumbein den Hinweis gefunden (S.203) dass Aggregatsfunktionen nur mit numerischen Werten möglich sind :-(

Verfasst: Mi, 06.06.2007 15:45
von emtewe
So, ich habe jetzt eine Abfrage im Entwurfsmodus erstellt, die Namen werden gruppiert (Funktion Gruppierung) und das Datum steht auf Maximum (Funktion Maximum).

Es funktioniert soweit, nur wie kann ich jetzt weitere Daten anzeigen lassen?

Wenn ich weitere Spalten hinzufüge, dann muss ich die auch gruppieren, und dann können plötzlich wieder mehr Einträge mit einem Namen auftauchen.

Gruß
emtewe

Verfasst: Mi, 06.06.2007 16:48
von berndkli
Hallo emteve

Erstelle zunächst eine Tabellenansicht mit den Spalten Name und Datum und wende die Funktionen Gruppierung und Max an.
Dann baust du dir eine Abfrage mit den Spalten Name und Datum aus der Tabellenansicht und den übrigen Datenspalten aus der eigentlichen Tabelle.
Verknüpfe die beiden Tabellen über die Datumsspalte.

Gruss Bernd

Verfasst: Mi, 06.06.2007 17:04
von emtewe
Danke, werde ich Freitag probieren...

Gruß
Michael

Mit der zweiten Abfrage, das hätte ich auch so gemacht, ...

Verfasst: Mi, 06.06.2007 20:10
von NTClient
... aber weiß eigentlich immer noch niemand, wie ich in einer Abfrage Daten eingeben oder ergänzen kann?
Gruß Bernd!

Verfasst: Mi, 06.06.2007 22:47
von Barlee
Hallo emtewe, bernd(kli),

@emtewe: folgende Abfrage könnte für Dich als Arbeitsgrundlage dienen. Sie ist die Umsetzung von Bernd's Vorschlag.
@Bernd: Eine Verknüpfung über die Datumsspalte reicht m.E. nicht aus. Das würde dazu führen, dass einige Daten dem falschen Namen zugeordnet werden. Bsp.

folgende Ausgangsdaten:
AAA 04.01.01 A1
EEE 04.01.01 E2

führen bei Verknüpfung nur über die Datumsspalte zu folgendem Ergebnis:
EEE 04.01.01 A1
EEE 04.01.01 E2
AAA 04.01.01 A1
AAA 04.01.01 E2

Daher sollte auch der Name einbezogen werden.

Code: Alles auswählen

select
a.Name,
a.Datum,
b.Daten

from

(Select Name, max(Datum) as Datum from EMTEWE group by Name) a,
(Select Name, Daten, max(Datum) as Datum from EMTEWE group by Name, Daten) b

where 

a.Name = b.Name and 
a.Datum = b.Datum
Gruß Barlee

Verfasst: Mi, 06.06.2007 23:31
von berndkli
Hallo Barlee
@Bernd: Eine Verknüpfung über die Datumsspalte reicht m.E. nicht aus. Das würde dazu führen, dass einige Daten dem falschen Namen zugeordnet werden.
Hast recht. Hab ich falsch gedacht.

Der letzte Satz in meinem Posting von 16:48 muss demnach lauten:
Verknüpfe die Tabellen über die Datum- und Namenspalten.

Gruss Bernd

Re: Abfrage letzter Einträge

Verfasst: Mo, 11.06.2007 10:48
von emtewe
Ich habe das jetzt wie beschrieben probiert:

1. Ich habe eine Abfrage erstellt nur aus den Spalten Name und Datum, und habe mit Gruppieren und Max das ganze nach dem Datum sortiert. Diese Tabelle sieht so aus wie es mir vorgestellt habe, nur muss ich beim Öffnen der Abfrage das Format des Datums neu einstellen, weil dort nur Zahlen stehen. Diese Abfrage habe ich "Letzte Einträge" genannt.

2. Jetzt habe ich eine neue Abfrage im Entwurfsmodus erstellt, habe dort die ursprüngliche Tabelle mit allen Daten, sowie die Abfrage "Letzte Einträge" geöffnet, und habe über "Einfügen - neue Relation" die Spalten "Name - Name" und die Spalten "Datum - MAX (Datum)" verbunden.

...leider bekomme ich jetzt, immer wenn ich speichern möchte oder die Vorschau mit F4 aktiviere, die Meldung "Syntax Error in SQL Expression"

Lasse ich die Verknüpfung über das Datum weg, funktioniert es, allerdings nur mit den hier schon angedeuteten Fehlern, die Verknüpfung nur über den Namen reicht nicht aus.

Kann dies daran liegen dass das Datumsformat in der Abfrage "Letzte Einträge" sich irgendwie durch die MAX-Gruppierung verändert hat?

viele Grüße, und Danke schonmal an alle die sich hier beteiligen
Michael

Re: Abfrage letzter Einträge

Verfasst: Mo, 11.06.2007 13:54
von berndkli
Hallo Michael
emtewe hat geschrieben:Ich habe eine Abfrage erstellt nur aus den Spalten Name und Datum,
Du must eine TABELLENANSICHT erstellen.Das findest du unter Tabellen=> Aufgaben =>Ansicht erstellen.
Öffne dann eine Abfrage im Entwurfsmodus, öffne deine Tabelle und die Ansicht "Letzte Eintäge",
klicke in "Letzte Einträge" auf die Datumsspalte und ziehe sie auf die Datumsspalte der Tabelle. Mit der Namensspalte verfährst du genauso.


Gruss Bernd

Re: Abfrage letzter Einträge

Verfasst: Mo, 11.06.2007 16:42
von emtewe
Danke, das wars. Mit der Änderung funktionierts wie zuvor beschrieben...

Gruß
Michael

Re: Abfrage letzter Einträge

Verfasst: Di, 12.06.2007 11:49
von Gert Seler
Hallo emtewe,
Du solltest unbedingt den "Namen" entsprechende "Kundennummern" zuweisen, damit werden spätere Namensgleichheiten z.B. Klaus Zweimal (sen)
und Klaus Zweimal (jun) vermieden.
Die Zahlen beim "Datum" sind richtig, denn das Datum wird ab dem 31-12-1899 aufsteigend hochgezählt.

mfg
Gert

Re: Abfrage letzter Einträge

Verfasst: Di, 12.06.2007 14:35
von emtewe
Danke für den Hinweis, aber die Namen in der Liste beziehen sich auf eindeutige Objekte, d.h. jeder Name steht für genau ein Objekt. Den Objekten können verschiedene Ereignisse zu verschiedenen Terminen zugeordnet sein, und manchmal brauche ich halt eine Liste mit allen letzten Ereignissen für alle Objekte, dafür diese Abfrage.

Es läuft inzwischen auch richtig gut...

Das nächste Problem das auch mich zukommt ist eine Abfrage mit variablen Grenzwerten, dh. ich brauche ein Formular in das ich eine Ober- und Untergrenze eingeben kann, welches mir dann alle dazwischen liegenden Einträge als Tabelle liefert... aber ich schau erstmal wie weit ich selber komme, das ist sicher besser zum Lernen, und wenn ich nicht weiterkomme schau ich hier nochmal vorbei. Prima Forum übrigens!

Gruß
Michael

Re: Abfrage letzter Einträge

Verfasst: Mi, 13.06.2007 15:24
von emtewe
So, nächstes Problem:

Ich habe nun versucht die gleichen Schritte auf einer MySQL Datenbank zu wiederholen, aber leider taucht dort das ursprüngliche Problem wieder auf. Wenn ich eine Tabellenansicht erstelle, bekomme ich wieder das Problem mit dem Datum welches in eine Zahl umgewandelt wird...

Komischerweise sieht die Tabellenansicht, was das Symbol betrifft, dort auch genauso aus wie eine Tabelle.

Gruß
emtewe