Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Tabelle mit MAX filtern

Begonnen von Pit1275, Juni 08, 2012, 15:39:50

⏪ vorheriges - nächstes ⏩

Pit1275

Hi, ich habe da ein Problem, welches sicherlich einfach zu lösen ist, aber ich bekomm es einfach nicht hin  >:(.

Ich möchte eine Abfrage erstellen, welche sich auf eine Tabelle (tbl_Bilder) mit 4 Spalten bezieht.

EinlaufNR - Int
ID_Bild - char  (Primary Key)
Bilddatum - date
Bildbeschreibung - char

Pro EinlaufNR können mehrere Bilder mit logischerweise verschiedenen ID_Bild - Nummern existieren. Dabei können diese Bilder aber durchaus das gleiche Datum haben.

Ich möchte aber nun nur das zu jeder EinlaufNR gehörende aktuellste Bild, wenn es da mehere vom gleichen Datum gibt soll er nach der größten ID_Bild gehen.
Ich hoffe es ist erst einmal klar geworden, worum es mir geht.

Das folgende läuft zwar, bringt mir aber dann nicht den gewünschten Datensatz, sondern eben, zu jeder EinlaufNR das neuste Datum und die höchste ID_Bild.

SELECT EinlaufNR, MAX(Bilddatum), MAX(ID_Bild), FIRST(Bildbeschreibung)
FROM tbl_Bilder
GROUP BY tbl_Bilder.EinlaufNR;


Schon mal danke für die zahlreichen Tipps und Tricks  :)

database

Hallo,

versuch mal so:


SELECT EinlaufNr, Max(Bilddatum) AS Bilddatum, Last(ID_Bild) AS ID_Bild, Last(Bildbeschreibung) AS Bildbeschreibung
FROM tbl_Bilder
GROUP BY tbl_Bilder.EinlaufNr;


HTH

p.s. lösche die Umfrage wieder raus ... siehe auch PN  ;)

Pit1275

Hi, erst mal Danke für die schnelle Antwort.

Leider hat dies noch nicht ganz zum gewünschten Resultat geführt. Zunächst hab ich da die Fehlermeldung zum Zirkelbezug bekommen, da scheinbar der Spaltenname identisch ist. Hab den Code dann so abgeändert, dass die Namen nicht Übereinstimmen und dann wird er wenigstens ausgeführt.

Bei dieser Beispieltabelle (tbl_Bilder)

EinlaufNR    ID_Bild    Bilddatum     Bildbeschreibung
1                 1             07.02.2008
1                 1_1         08.02.2008
2                 2             08.02.2008
2                 2_1         08.02.2008
2                 2_2         09.02.2008   HalloBild
2                 2_3         08.02.2008
3                 3             09.03.2009

liefert

SELECT EinlaufNr, Max(Bilddatum) AS Bilddatum1, Max(ID_Bild) AS ID_Bild1, Last(Bildbeschreibung) AS Bildbeschreibung1
FROM tbl_Bilder
GROUP BY tbl_Bilder.EinlaufNr;


EinlaufNR    ID_Bild    Bilddatum     Bildbeschreibung
1                 1_1         08.02.2008
2                 2_3         09.02.2008 
3                 3             09.03.2009

Der Code von dir bringt
(SELECT EinlaufNr, Max(Bilddatum) AS Bilddatum1, Last(ID_Bild) AS ID_Bild1, Last(Bildbeschreibung) AS Bildbeschreibung1
FROM tbl_Bilder
GROUP BY tbl_Bilder.EinlaufNr;)

EinlaufNR    ID_Bild    Bilddatum     Bildbeschreibung
1                 1             08.02.2008
2                 2             09.02.2008
3                 3             09.03.2009

Ich möchte aber als Ergebnis

EinlaufNR    ID_Bild    Bilddatum     Bildbeschreibung
1                 1_1         08.02.2008
2                 2_2         09.02.2008
3                 3             09.03.2009

Und wie schon Eingangs erwähnt sollte er, wenn zu einer EinlaufNR meherere Bilder mit gleichem Datum da sind die höchste ID_Bild nehmen. Er soll aber auf keinen Fall einen neuen Datensatz erzeugen, den es ja gar nicht gibt.


database

#3
Hallo,

sieh mal im Anhang!

Ich habe deine Tabellendaten in ein Beispiel gefaßt.

Irgendwie stehen die Tabellendaten aber in Widerspruch, da bei 2_2 und 2_3 für die höhere ID ein niedrigeres Datum in der Tabelle steht.  ???

Zitat...Er soll aber auf keinen Fall einen neuen Datensatz erzeugen, den es ja gar nicht gibt...
Es wird kein neuer Datensatz erzeugt, das passier wahrscheinlich durch die Kombi Letzter Wert und Max ID

HTH

[Anhang gelöscht durch Administrator]

Pit1275

Hi, also entweder liegt es an mir oder ich weiß nicht so recht ob wir uns da verstanden haben  :-\
Deine Abfrage bringt doch für EinlaufNr: 2 als Bilddatum den 09.02.2008 (was ja auch richtig ist) aber dazu wird die ID_Bild
2_3 ausgegeben und das ist doch falsch oder???. Diesen Datensatz gibt es doch gar nicht. Zum 09.02.2008 gehört doch die ID_Bild 2_2.
Sorry, wenn es an mir liegt und ich es einfach net raffe.

database

Wie schon gesagt, das ist kein neuer Datensatz - der exisitiert ja nicht in der Tabelle.
Das ist die Darstellung der vorhandenen Daten, wobei durch die Kombination Max, Last und der Tatsache, dass der Datensatz mit der höchsten ID
ein niedrigeres Datum beinhaltet, der Inhalt von 2 Datensätzen  'verschoben' dargestellt werden.

Ich versuch noch was ...


database

Ich denke, dass mit diesem Tabellenaufbau das gewünschte Ergebnis nicht realisierbar ist.

Vielleicht übersehe ich auch etwas - denke aber eher nicht.

Ich finde keine Möglichkei eine auswertbare Eindeutigkeit in den 2_2 - Datensatz zu bringen

database

Hallo,

offensichtlich habe ich dann doch was übersehen ...

im Anhang findest du eine Lösung, die das Ergebnis zeigt, das du erwartet hast.  ;D

Hoffe das ist so in der Form für dich einsetzbar.



[Anhang gelöscht durch Administrator]

Pit1275

 ;D ;D ;D
Na supie, das sieht doch gut aus. Dies sollte es tun, werde es mal ins große Ganze einfügen und dann testen.
Aber ich denke ich kann dies beruhigt als gelöst markieren.
Noch mal vielen Dank für die Mühe.

Peter dankt Peter :D

database

Hallo auch,

ich hoffe, dass das Ding auch im 'großen Ganzen' seinen Dienst ordungsgemäß leistet.
Ich schreibe 'hoffe' da m.E. in der ganzen Sache ein gewisses Maß an Unsicherheit vorhanden bleibt - keine Felder der Tabellen-/Abfrageverknüpfungen sind
Schlüsselfelder und KÖNNTEN somit auch willkürlich in der Herkunftstabelle geändert werden  - was dann wiederum weitere Probleme bei der Auswertung bringen würde.

Schönen Samstag!