Re: Join aber nur neusten eintrag anzeigen

From: "rene hankel" <rene(dot)hankel(at)avt-verkehrstechnik(dot)de>
To: <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Re: Join aber nur neusten eintrag anzeigen
Date: 2006-04-11 09:45:31
Message-ID: 001101c65d4c$b3f84dd0$6e3ca8c0@avtndhc01
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

-----Ursprüngliche Nachricht-----
Von: rene hankel [mailto:rene(dot)hankel(at)avt-verkehrstechnik(dot)de]
Gesendet: Montag, 10. April 2006 16:51
An: 'A. Kretschmer'
Betreff: AW: [pgsql-de-allgemein] Join aber nur neusten eintrag anzeigen

> -----Ursprüngliche Nachricht-----
> Von: pgsql-de-allgemein-owner(at)postgresql(dot)org
> [mailto:pgsql-de-allgemein-owner(at)postgresql(dot)org] Im Auftrag von A.
> Kretschmer
> Gesendet: Montag, 10. April 2006 15:40
> An: pgsql-de-allgemein(at)postgresql(dot)org
> Betreff: Re: [pgsql-de-allgemein] Join aber nur neusten eintrag
> anzeigen
>
> am 10.04.2006, um 15:11:27 +0200 mailte rene hankel folgendes:
> > Hi,
> >
> > Folgende abfrage(leicht vereinfacht zwecks uebersich):
> >
> > SELECT anlagen.tbl_anlage.id,
> > anlagen.tbl_anlage.standort,
> > anlagen.tbl_anlage.bezeichnung
> > anlagen.tbl_planungsversion.version,
> > anlagen.tbl_planungsversion.date
> > FROM anlagen.tbl_anlage
> > LEFT OUTER JOIN anlagen.tbl_anlagentyp
> > ON anlagen.tbl_anlage.anlagentyp_id =
> anlagen.tbl_anlagentyp.id
> > LEFT OUTER JOIN anlagen.tbl_planungsversion
> > ON anlagen.tbl_anlage.id =
> > anlagen.tbl_planungsversion.anlage_id
> > WHERE (anlagen.tbl_anlage.id IN ( ....
> >
> >
> > PROBLEM:
> > Die tabelle anlagen.tbl_planungsversion enthaelt alle
> versionen der anlage
> > ueber den zeitraum x.
> > In der tabelle soll aber immer nur die LETZTE version(vom datum her)
> > angezeigt werden. Logischweise Würde die abfrage wie oben funzen,
> > wenn ich sie nach id,
> date sortiere und
> > immer nur die 1. zeile
>
> Wäre eine weitere WHERE-Bedingung auf max(date) nicht das, was Du
> suchst? Also:
>
> WHERE (anlagen.tbl_anlage.id IN ( .... ) and
> anlagen.tbl_planungsversion.date = (select
> max(anlagen.tbl_planungsversion.date) from anlagen.tbl_planungsversion
> ...)
>
>
> Und/oder:
>
> ein View auf anlagen.tbl_planungsversion, der nur die neueste Version
> jeweils beinhaltet, und diesen View in Deine Abfrage einbeziehen. Das
> sollte zwar dann auf dasselbe hinauslaufen, sieht aber übersichtlicher
> aus und Du hast gleich einen schönen View auf die aktuell gültige
> Version der Anlage...
>
>
> Andreas
> --
> Andreas Kretschmer (Kontakt: siehe Header)
> Heynitz: 035242/47215, D1: 0160/7141639
> GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
> === Schollglas Unternehmensgruppe ===
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/docs/faq
>

Es hat mir weitergeholfen jedoch funzen die beide dinge nicht direkt, weil
1.) das zusatz 'AND (SELECT...max(date...' bei nicht vorhanden daten,
natuerlich
auch kein ergebnis bringt, was durchaus moeglich ist bei meinen
daten.
*irgendwas ist ja immer*
2.) der view ist auch nett, aber er wuerde nur EINEN eintrag EINER anlage
bringen,
obwohl ich mehrer darstellen moechte.

Grundsaetzlich koennte das ergebnis der joins ohne filter so aussehen:

Id |standort |bezeichnung |version |versionsdate
----------------------------------------------------------------------------
----------
1 |da |diese anlage |1.0.0 | 2006.03.12
1 |da |diese anlage |1.1.0 | 2004.04.01
1 |da |diese anlage |1.0.3 | 2006.03.20
1 |da |diese anlage |1.0.1 | 2002.03.20
2 |hier |jene anlage |1.0.6 | 2005.09.11
2 |hier |jene anlage |0.0.9 | 2000.02.21
2 |hier |jene anlage |1.1.5 | 2002.08.01
2 |hier |jene anlage |1.2.0 | 2004.11.01
3 |dort |welchige | |

Ich moechte aber das so, wenn moeglich in einer abfrage:

Id |standort |bezeichnung |version |versionsdate
----------------------------------------------------------------------------
----------
1 |da |diese anlage |1.0.3 | 2006.03.20
2 |hier |jene anlage |1.0.6 | 2005.09.11
3 |dort |welchige | |

Ich habe das jetzt so geloest.

.
.
.
FROM anlagen.tbl_anlage
LEFT OUTER JOIN anlagen.tbl_anlagentyp
ON anlagen.tbl_anlage.anlagentyp_id = anlagen.tbl_anlagentyp.id
LEFT OUTER JOIN anlagen.tbl_planungsversion
ON (anlagen.tbl_anlage.id = anlagen.tbl_planungsversion.anlage_id)
AND
( anlagen.tbl_planungsversion.id IN (
SELECT DISTINCT ON
(anlage_id) id
FROM
anlagen.tbl_planungsversion
ORDER BY anlage_id,
unixtimestamp DESC
)
)
WHERE anlagen.tbl_anlage.id IN (...

FRAGE: gibt es daran ausser dem 'DISTINCT ON' was auszusetzen?

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message rene hankel 2006-04-12 09:58:51 Pgadmin III: stored procedures via funktionen
Previous Message A. Kretschmer 2006-04-10 13:40:05 Re: Join aber nur neusten eintrag anzeigen