Tabelle mit "Zähler"

Tabelle mit "Zähler"

am 21.09.2005 09:15:27 von mk

Hallo,

ich habe zwei Tabellen, in der ersten steht ein Index und ein paar
Daten. Die zweite Tabelle hat ebenso den Index, der auf den Index der
ersten Tabelle verweist. Der Index kommt in der zweiten Tabelle mehrfach
vor, weil die Daten eine Art Historie haben. Der letzte Datensatz ist
durch einen "Zaehler" gekennzeichnet. Also etwa so:

Index Zaehler Wert
123 1 erster Wert
123 2 zweiter Wert
123 3 dritter Wert
124 1 nur ein Wert

usw. Gesucht wird jeweils der 'neuste' Wert, gekennzeichnet durch den
höchsten Zähler. Ausgegangen wird von der ersten Tabelle, wo der Inde=
x
her kommt.

Das ganze habe ich jetzt folgendermaßen gelöst: mit einem Select wird=

der für den passenden Index maximale Zähler ermittelt. Das wiederum w=
ird
in einem neuen Select genutzt, den Wert dafür herauszufinden. Der
nächste Select geht von der ersten Tabelle aus. Hier meine aktuelle
Lösung (mit nicht fiktiven Tabellen):

select MeNu.isn, MeKznNu
from
(SELECT MeNu.ISN, MAX(MeNu.ZAEHLER) AS ZAEHLER
FROM MeNu
GROUP BY ISN) AS maxi LEFT OUTER JOIN
(SELECT MeNu.MeKznNu, ISN, Zaehler
FROM MeNu) as MeNu
ON (MeNu.ISN =3D maxi.ISN) AND (MeNu.Zaehler =3D maxi.Zaehler)

Diesen Konstrukt brauche ich sehr häufig. In größeren Abfragen wä=
ren
mehrere davon nötig, was das Query äußerst komplex und schwer zu le=
sen
macht. Ich suche jetzt eine einfachere Möglichkeit für dieses (wie ic=
h
finde gängiges) Problem. Gibt es diese?

Vielen Dank im Voraus,
Markus

Re: Tabelle mit "Zähler"

am 21.09.2005 12:07:44 von newsgroup

"Markus Kämmerer" schrieb im Newsbeitrag
news:433108ed$0$2100$9b4e6d93@newsread2.arcor-online.net...
Hallo,

>ich habe zwei Tabellen, in der ersten steht ein Index und ein paar
>Daten. Die zweite Tabelle hat ebenso den Index, der auf den Index der
>ersten Tabelle verweist. Der Index kommt in der zweiten Tabelle mehrfach
>vor, weil die Daten eine Art Historie haben. Der letzte Datensatz ist
>durch einen "Zaehler" gekennzeichnet. Also etwa so:

>Index Zaehler Wert
>123 1 erster Wert
>123 2 zweiter Wert
>123 3 dritter Wert
>124 1 nur ein Wert

>usw. Gesucht wird jeweils der 'neuste' Wert, gekennzeichnet durch den
>höchsten Zähler. Ausgegangen wird von der ersten Tabelle, wo der Index
>her kommt.

Du hast also eine Tabelle T1 mit der Spalte T1.id
und eine Tabelle T2 mit den Spalten t1_id, zaehler, wert und Du möchtest

select id, wert from <...>

wobei wert der zu id gehörige Wert ist mit maximalem zaehler, korrekt?

Da schlage ich vor:

select t1.id, aussen.wert from t1, t2 as aussen
where t1_id = aussen.t1_id
and aussen.zaehler = ( select max(innen.zaehler) from t2 as innen
where t1.id = innen.t1_id )

Das setzt natürlich voraus, dass für die Tabelle t2 die Spalten (i1_id,
zaehler) zusammen
unique sind, sonst ist die Antwort auf den Select je ID nicht eindeutig.

Gruß,
Michael