Probleme mit SQL-Abfrage

Lautsprecher

Erfahrenes Mitglied
Hallo ich habe ein Problem mit einer SQL-Abfrage, vielleicht könnt ihr mir dabei helfen.
Ich habe zwei Tabellen (A,B):

Tab_A

Ausweis| PNR| angelegt am:
1234 | 007 | 10.10.2005
4444 | 007 | 13.02.2006
5534 | 007 | 31.12.2007
5788 | 005 | 29.02.2008
8900 | 005 | 10.03.2008



Tab_B

PNR| Nachname| Vorname
007 | Bond | James
005 | Sala | Wolfi


Ich möchte mir nun einen kompletten Datensatz mit PNR, AusweisNr, Nachname, Vorname und angelegt anzeigen lassen. Allerdings möchte ich nur die Datensätze, mit dem aktuellsten Datum haben


Folgendes habe ich bereits ausprobiert, dabei liefer er mir aber den aktuellsten Datensatz aus der Tabelle A also:

8900 | 005| Sala | Wolfi | 10.03.2008




Code:
SELECT     Tab_A.ausweis, Tab_A.pnr, Tab_B.nname, Tab_B.vname, 

FROM         Tab_A INNER JOIN

                      Tab_B ON Tab_A.pnr = Tab_B.pnr

WHERE     (Tab_B.nachname LIKE '%') AND (Tab_A.angelegt_am =

                          (SELECT     MAX(Tab_A.angelegt_am)

                            FROM          Tab_A))

ORDER BY Tab_B.nachname
 
Zuletzt bearbeitet:
Hi,

ungetestet:

SQL:
SELECT Tab_A.ausweis, Tab_A.pnr, Tab_B.nname, Tab_B.vname, MAX(Tab_A.angelegt_am)
   FROM Tab_A INNER JOIN Tab_B ON Tab_A.pnr = Tab_B.pnr
   WHERE Tab_B.nachname LIKE '%'
   GROUP BY Tab_A.pnr
   ORDER BY Tab_B.nachname

LG
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
leider geht es immer noch nicht!


Code:
SELECT     Tab_A.pnr, MAX(Tab_A.datumvonn) AS datumvonn, Tab_B.vname, Tab_B.nname
FROM         Tab_A INNER JOIN
                     Tab_B ON Tab_A.pnr = Tab_B.pnr
GROUP BY Tab_A.pnr, Tab_B.vname,Tab_B.nnameORDER BY Tab_B.nname


es läuft so lange gut, bis ich im Select und group by
Tab_A.angelegt_am
anlege. Dann bringt er mir wieder alle Datensätze!
 
Zuletzt bearbeitet:
Hallo,
wenn ich nicht alle Spalten die ich im Select angegeben habe, im group by angebe bekomme ich auf dem SQL-Server2000 folgende Fehlermeldung:

z.B. lasse ich in Group BY die Spalte Vorname weg ->

Vorname is invalid in the select list because it is not contained in either an aggregate function or in the GROUP BY clause
 
Ich hätte da noch eine andere Lösung:

SQL:
select tmp_tbl.Ausweis, Tab_B.PNR, Tab_B.Nachname, Tab_B.Vorname, tmp_tbl.angelegt_am
from Tab_B
join (
  select Ausweis,PNR,angelegt_am
  from Tab_A
  group by PNR
  having MAX(angelegt_am)
  ) tmp_tbl on Tab_B.PNR = tmp_tbl.PNR

Ich hab das Where Statement mal weggelassen, da ein Like Vergleich von Nachname und '%' Ja doch eher sinnlos ist :)

Getestet hab ich das auf nem Mysql Server. Kann sein das auch hier noch wegen dem group by rumgemekert wird
 
Zuletzt bearbeitet:
Hallo erstmal Dankeschön,

ich habe es jetzt passend auf meine Tabellen umgewandelt,
allerdings habe ich bis jetzt immer noch ein Syntaxproblem! Er bringt mir jetzt ständig
"incorrect syntax near ')'

... mh, wüsste jetzt aber nicht das eine Klammer zuviel oder zuwenig wäre

irgendwie hakt es anscheinend am zweiten Select, da kann ich wenden und drehen soviel ich will.........
kann man den Select dort wirklich einbauen?
 
Zuletzt bearbeitet:
Habs jetzt auf nem MSSQL Server ausprobiert und den Fehler gefunden.

Die Having Syntax ist hier nicht richtig, aber hab auf die Schnelle auch keine Ahnung wie man das umbauen kann. Sorry.
 
Probier mal folgendes (ungetestet):
Wenn das funktioniert, dann dürfte es ein leichtes sein auch noch die Tabelle B mit ein zu joinen.


SQL:
select * from tab_a where
pnr || angelegt_am in (
select pnr || max(angelegt_am)
from tab_a
group by pnr
)
 
Hallo shutdown,

danke Dir, ich habe jetzt noch einen Join eingebaut und jetzt läuft es einwandfrei.Wir haben jetzt 3 Tage daran rumgebastelt. Jetzt knallen erstmal die Sektkorken!!
 
Zurück