Nur neusten von gleichen ausgeben

So, ich erklaere das jetzt nochmal:

ich habe eine adressenliste und da kann sich jeder wenn er umzieht oder so einfach nochmal eintragen. ich habe mir dann vorgestellt dass ich einfach wenn ich eine aktuelle liste von allen haben will nur den eintrag nehme der das aktuellste datum hat (bei den eintraegen die doppelt vorkommen.)

ist das klar?
geht das mit mySQL? oder muss ich dass mittels der verwendeten programmiersprache machen?

danke

Moin, David,

wer umzieht, trägt seine alte Adresse nochmal ein, nur mit einem neuen Datum? Warum sollte das jemand tun?

ist das klar?

Nein.

geht das mit mySQL?

Alles geht. Zum Einstieg empfehle ich, bei SELECT nachzulesen, dort könnte das Schlüsselwort DISTINCT erwähnt sein. Ich kenne mySQL nicht, aber diese beiden Begriffe sollte es schon geben.

Gruß Ralf

Hi,
Ich halte die prinzipielle Idee nicht für sonderlich pfiffig … es wäre sinnvoller nur einen Datensatz zu pflegen, aber das ist eine andere Baustelle.

ich nehme mal an, dass der Name ein eindeutiges Erkennungszeichen der Personen ist.

Dann könnte dein Select in etwa so aussehen:

select *
from adresse
where (name, datum) in (
select name, max(datum)
from adresse
group by name
)

Jens

Mahlzeit,

Ich halte die prinzipielle Idee nicht für sonderlich pfiffig
… es wäre sinnvoller nur einen Datensatz zu pflegen, aber
das ist eine andere Baustelle.

damit gingen Dir aber alle historischen Daten verloren. Die Aufgabe ist durchaus sinnvoll und praxisnah.

(Abgesehen davon, daß der Name nicht erneut angegeben, sondern auf einer zweiten Tabelle und über eine identifizierende Spalte gejoined werden sollte).

ich nehme mal an, dass der Name ein eindeutiges
Erkennungszeichen der Personen ist.

DAS wäre allerdings nicht sonderlich pfiffig!
Dein Select lasse ich gelten, wenn DU dann über die ID gruppierst :smile:

Gruß

Sancho

Mahlzeit,

Ich halte die prinzipielle Idee nicht für sonderlich pfiffig
… es wäre sinnvoller nur einen Datensatz zu pflegen, aber
das ist eine andere Baustelle.

damit gingen Dir aber alle historischen Daten verloren. Die
Aufgabe ist durchaus sinnvoll und praxisnah.

(Abgesehen davon, daß der Name nicht erneut angegeben, sondern
auf einer zweiten Tabelle und über eine identifizierende
Spalte gejoined werden sollte).

Eine von vielen Möglichkeiten.

ich nehme mal an, dass der Name ein eindeutiges
Erkennungszeichen der Personen ist.

DAS wäre allerdings nicht sonderlich pfiffig!

Ich hab ja auch nicht gesagt, dass er dass so machen soll, sondern nur, dass ich das einfach mal annehme. Viel mehr Chancen hat man nicht, wenn es nicht angegeben wird

Dein Select lasse ich gelten, wenn DU dann über die ID
gruppierst :smile:

Die gibt es in meinem Beispiel nicht …

Gruß

Sancho

Gruß
Jens

danke fuer die schnelle antwort, ich werde es mal testen.

mit tabellen joinen wollte ich mich schon laenger mal beschaeftigen, sicherlich sehr lohnenswert.

Servus,

ich würde das (in meinem Stil) so machen:

SELECT *
FROM tabelle tab
WHERE NOT EXISTS (SELECT 1
FROM tabelle tab1
WHERE tab1.NAME = tab.NAME --> Anmerkung muss eindeutig sein
–>, also evtl. noch Vorname oder statt dessen
–>eine ID reinnehmen
AND tab1.Datum > tab.Datum)

doch noch dazu gekommen das mal zu testen:

SELECT *
FROM adressen
WHERE (
Name, datum
)
IN (

SELECT Name, MAX( datum )
FROM adressen
GROUP BY Name
)

dann kommt:

MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ’ datum) in (
select Name, MAX(datum)
from adressen
group by

der IN befehl

SELECT Name, MAX( datum )
FROM adressen
GROUP BY Name

funktioniert

Hi David,

WHERE (
Name, datum
)
IN (

soweit ich weiß, klappt WHERE … IN nur mit einem einzigen Argument.

Gruß Ralf

Heissen die Spalten bei dir denn genau so? /*überrascht sein*/

Ich vergas noch zu sagen: Das funktioniert zumindest unter Oracle so (obwohl ich es da noch ein wenig anders machen würde)
Ich hatte gehofft, dass MySQL das auch kann, versprechen kann ich das nicht

Sollte diese Einschränkung zutreffen könnte man sich helfen, in dem man die Spalten aneinanderhängt. Keine Ahnung wie das in MySQL geht, in Oracle wäre das dann:


WHERE (
Name || datum
) IN ( name || max(datum)) …

Gibt natürlich diverse, wenn auch esoterische Fälle, in denen das Probleme macht.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]