Hilfe zu SQL Abfrage

Hilfe zu SQL Abfrage

am 19.11.2007 10:00:27 von Martin Nadoll

Hallo,

ich habe keine gescheite Idee, die SQL-Abfrage für folgende Anforderung zu
erstellen:

Tabelle:
ID, Datum, PersonenID, Tel-Nr

Bei Änderung der Tel-Nr wird kein edit, sondern ein neuer Eintrag mit
aktuellem Datum erzeugt, um auch sehen zu können, welche Nr die Leute z.B.
am 1.1.2005 hatten.
Somit steht eine Person u.U. mehrfach in der Tabelle.
ID1 2002-10-22 PersonenID1 0171/123456
ID2 2003-04-30 PersonenID2 0172/123456
ID3 2007-01-01 PersonenID1 0174/123456

1. Wie ist die Abfrage für die altuelle Tel-Nr aller vorhandenen Leute?
(muss ID2 und ID3 ausgeben)
2. wie frage ich PersonenID und Tel-Nr aller Leute am z.B. 20.5.2006 ab?
(muss ID1 und ID2 ausgeben)

Dabei soll jeder Name natürlich nur einmal, und mit der Tel-Nr, die am
Abfragezeitpunkt aktuell war, erscheinen.

Vielen Dank für jede Hilfe,
Martin Nadoll

Re: Hilfe zu SQL Abfrage

am 19.11.2007 10:18:23 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Hilfe zu SQL Abfrage

am 19.11.2007 11:34:40 von Stephan Menzel

On Mon, 19 Nov 2007 10:00:27 +0100, "Martin Nadoll"
wrote:

>Hallo,
>
>ich habe keine gescheite Idee, die SQL-Abfrage für folgende Anforderung zu
>erstellen:
>
>Tabelle:
>ID, Datum, PersonenID, Tel-Nr
>
>Bei Änderung der Tel-Nr wird kein edit, sondern ein neuer Eintrag mit
>aktuellem Datum erzeugt, um auch sehen zu können, welche Nr die Leute z.B.
>am 1.1.2005 hatten.
>Somit steht eine Person u.U. mehrfach in der Tabelle.
>ID1 2002-10-22 PersonenID1 0171/123456
>ID2 2003-04-30 PersonenID2 0172/123456
>ID3 2007-01-01 PersonenID1 0174/123456
>
>1. Wie ist die Abfrage für die altuelle Tel-Nr aller vorhandenen Leute?
>(muss ID2 und ID3 ausgeben)
>2. wie frage ich PersonenID und Tel-Nr aller Leute am z.B. 20.5.2006 ab?
>(muss ID1 und ID2 ausgeben)
>
>Dabei soll jeder Name natürlich nur einmal, und mit der Tel-Nr, die am
>Abfragezeitpunkt aktuell war, erscheinen.
>
>Vielen Dank für jede Hilfe,
>Martin Nadoll
>
Versuchs mal mit

SELECT * from (select * from tbl_teltest ** order by datum desc) t
group by t.person;

** hier optional auf datum beschränken mit:
WHERE datum<='20.5.2006' ansonsten die ** natürlich weg lassen!


cu Stephan

Re: Hilfe zu SQL Abfrage

am 19.11.2007 15:30:27 von Stefan Braumeister

Martin Nadoll schrieb:
> Hallo,
>
> ich habe keine gescheite Idee, die SQL-Abfrage für folgende Anforderung zu
> erstellen:
>
> Tabelle:
> ID, Datum, PersonenID, Tel-Nr
>
> Bei Änderung der Tel-Nr wird kein edit, sondern ein neuer Eintrag mit
> aktuellem Datum erzeugt, um auch sehen zu können, welche Nr die Leute z.B.
> am 1.1.2005 hatten.
> Somit steht eine Person u.U. mehrfach in der Tabelle.
> ID1 2002-10-22 PersonenID1 0171/123456
> ID2 2003-04-30 PersonenID2 0172/123456
> ID3 2007-01-01 PersonenID1 0174/123456

Dir ist aber klar, dass das ein Design Fehler ist?
Darüberhinaus nicht sehr erweiterungsfähig, stell dir vor, jede Person
hat jetzt darüberhinaus eine Nummer(Privat,Geschäft...).


>
> 1. Wie ist die Abfrage für die altuelle Tel-Nr aller vorhandenen Leute?
> (muss ID2 und ID3 ausgeben)
> 2. wie frage ich PersonenID und Tel-Nr aller Leute am z.B. 20.5.2006 ab?
> (muss ID1 und ID2 ausgeben)
>
> Dabei soll jeder Name natürlich nur einmal, und mit der Tel-Nr, die am
> Abfragezeitpunkt aktuell war, erscheinen.
>
> Vielen Dank für jede Hilfe,
> Martin Nadoll
>
>

Re: Hilfe zu SQL Abfrage

am 19.11.2007 16:12:30 von Claus Reibenstein

Stefan Braumeister schrieb:

> Martin Nadoll schrieb:
>
>> Tabelle:
>> ID, Datum, PersonenID, Tel-Nr
>>
>> Bei Änderung der Tel-Nr wird kein edit, sondern ein neuer Eintrag mit
>> aktuellem Datum erzeugt, um auch sehen zu können, welche Nr die Leute z.B.
>> am 1.1.2005 hatten.
>> Somit steht eine Person u.U. mehrfach in der Tabelle.
>> ID1 2002-10-22 PersonenID1 0171/123456
>> ID2 2003-04-30 PersonenID2 0172/123456
>> ID3 2007-01-01 PersonenID1 0174/123456
>
> Dir ist aber klar, dass das ein Design Fehler ist?

Die Tabelle enthält zu einer Personen-ID den Eintrag, der sich ändert
(die Telefonnummer), einen Timestamp und eine ID. Was soll daran
fehlerhaft sein?

> Darüberhinaus nicht sehr erweiterungsfähig, stell dir vor, jede Person
> hat jetzt darüberhinaus eine Nummer(Privat,Geschäft...).

Eine entsprechende Kennung in Form einer zusätzlichen Spalte (ENUM, SET)
ist da schnell implementiert, falls es mal so weit kommen sollte.

Gruß. Claus