Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

wwwxxix Buzz, wwwxxxdbgf, ncurses font size, WWWXXX USABLE, WwwXXX MPEG4, WWWXXX BABBAGE WWWXXX, IIS_asps05kj, WWWXXXDOCO, WWW.XXX,GCDMO, Idl Wwwxxx

Links

XODOX
Impressum

#1: Tabelle mit "Zähler"

Posted on 2005-09-21 09:15:27 by 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=F6chsten Z=E4hler. Ausgegangen wird von der ersten Tabelle, wo der Inde=
x
her kommt.

Das ganze habe ich jetzt folgenderma=DFen gel=F6st: mit einem Select wird=

der f=FCr den passenden Index maximale Z=E4hler ermittelt. Das wiederum w=
ird
in einem neuen Select genutzt, den Wert daf=FCr herauszufinden. Der
n=E4chste Select geht von der ersten Tabelle aus. Hier meine aktuelle
L=F6sung (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=E4ufig. In größeren Abfragen w=E4=
ren
mehrere davon n=F6tig, was das Query =E4u=DFerst komplex und schwer zu le=
sen
macht. Ich suche jetzt eine einfachere M=F6glichkeit f=FCr dieses (wie ic=
h
finde g=E4ngiges) Problem. Gibt es diese?

Vielen Dank im Voraus,
Markus

Report this message

#2: Re: Tabelle mit "Zähler"

Posted on 2005-09-21 12:07:44 by newsgroup

"Markus Kämmerer" <mk@happyarts.de> 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

Report this message