Homepage selbermachen 7.852 Themen, 35.619 Beiträge

SQL-Abfrage

Tanja80 / 11 Antworten / Baumansicht Nickles

Hallo liebe Leute,

ich brauche Eure Hilfe!

Ich habe eine Tabelle Person mit 4 Attributen: Name, Vorname, Geburtsdatum und Geburtsort.
Ich brauche eine SQL-Abfrage, die aus Tabelle Datensätze mit Namensvetter ( Name + Vorname ) löscht, aber lässt nur den jüngsten bleiben z.B.

Schmidt | Markus | 1960 | Hamburg
Mustermann | Dieter | 1970 | Berlin
Mustermann | Dieter | 1980 | München

Ergebnis

Schmidt | Markus | 1960 | Hamburg
Mustermann | Dieter | 1980 | München

Ich bedanke mich im Voraus für Eure Muhe
Gruß
Tanja

bei Antwort benachrichtigen
basil Tanja80 „SQL-Abfrage“
Optionen

Bei deinem Problem kommt es auf die Datenbank an. Arbeitest Du mit einer Datenbank, welche Subselects unterstützt, so ist es relativ einfach:
DELETE FROM [Tabellenname] WHERE Vorname=(SELECT Vorname FROM [Tabellenname] GROUP BY (Vorname, Nachname)) AND Nachname=(SELECT Nachname FROM [Tabellenname] GROUP BY (Vorname, Nachname)) AND Geburtsdatum!=(SELECT MIN(Geburtsdatum) AS Datum FROM [Tabellenname] GROUP BY (Vorname, Nachname))
Ich habe das Statement zwar nicht getestet, aber es könnte so gehen. Unterstützt deine Datenbank keine Subselects, so wie z.B. MySQL, so wird es komplizierter. Da müsste ich selbst etwas herumexperimentieren.

bei Antwort benachrichtigen
Tanja80 basil „Bei deinem Problem kommt es auf die Datenbank an. Arbeitest Du mit einer...“
Optionen

Vielen Dank, Basil!

Aber ich darf leider aus der Tabelle nichts löschen - nur abfragen mit SELECT ....

Diese Abfrage brauche ich für Oracle und Access...

bei Antwort benachrichtigen
basil Tanja80 „Vielen Dank, Basil! Aber ich darf leider aus der Tabelle nichts löschen - nur...“
Optionen

Ach so, ich hatte dein Posting anders verstanden. Dadurch wird das Ganze etwas einfacher:
SELECT Name, Vorname, MAX(Geburtsdatum), Geburtsort FROM [Tabellenname] GROUP BY (CONCAT(Name, Vorname))

bei Antwort benachrichtigen
Tanja80 basil „Ach so, ich hatte dein Posting anders verstanden. Dadurch wird das Ganze etwas...“
Optionen

Hallo Basil,

für Deine Hilfe möchte ich mich herzlich bedanken.
Es sieht tatsächlich einfach aus!

Ich habe allerdings noch eine Frage an Dich :)

Ist es möglich Werte in einer Spalte nach bestimmten Bedingungen gruppieren? z.B Attribut Alter in 3 bestimmten Gruppen (0-30, 30-60, >60) gruppieren und MAX anzeigen.
Beispiel:

Alter
10
15
20
31
33
80

Ergebnis:

Max
20
33
80

Danke Voraus. Tanja.

bei Antwort benachrichtigen
basil Tanja80 „Hallo Basil, für Deine Hilfe möchte ich mich herzlich bedanken. Es sieht...“
Optionen

Ja, dies ist durchaus möglich:
SELECT MAX(Alter) FROM [Tabellenname] GROUP BY Alter BETWEEN 0 AND 30,Alter BETWEEN 31 AND 60, Alter >60

bei Antwort benachrichtigen
Tanja80 basil „Ja, dies ist durchaus möglich: SELECT MAX Alter FROM Tabellenname GROUP BY...“
Optionen

Hallo Basil,

Ich habe die erste Abfrage mit CONCAT in Access geprüft - es funktioniert leider nicht :(
Ich habe die gleiche Frage im CHIP-Forum gestellt. Schau mal...
http://www.chip.de/forum/thread.html?bwthreadid=424987

bei Antwort benachrichtigen
basil Tanja80 „SQL-Abfrage“
Optionen

Ich ging eigentlich davon aus, daß Du Access nur als Frontend für Oracle nimmst und die Oracle-Daten nur in Access zur clientseitigen Weiterverarbeitung nutzt. Access selbst unterstützt leider nur ein ziemlich verkrüppeltes Subset von ANSI-SQL. Ich habe zwar auch schon mit Access arbeiten müssen, nutzte da aber meist Workarounds über VB um das gewünschte zu erreichen. Eventuell solltest Du einmal im MSDN nachschauen, was Access genau unterstützt, oder eventuell wirklich Access nur als Präsentationsschicht für Oracle nutzen, falls das möglich ist.
Was das CHIP-Forum angeht, so erspare ich mir sämtliche Kommentare. Ich habe mir ein paar Antworten durchgelesen, davon war kein einziger auch nur annähernd richtig. SQL unterstützt äußerst komplexe Abfragen (je nach Datenbank) und es sind sogar Fourrier-Analysen rein über SQL möglich. Ebenso bezieht MAX sich immer auf die Ergebnisse, die in WHERE oder HAVING-Klauseln gewählt werden.
Leider habe ich momentan nur Zugriff auf MySQL, Postgres und SAPdb, in diesem Datenbanken funktionieren die Abfragen, Oracle könnte ich morgen testen, Access ist bei uns (zum Glück) tabu. *g*

bei Antwort benachrichtigen
Tanja80 basil „SQL-Abfrage“
Optionen

Richtig Basil, ich nehme Access nur als Frontend für Oracle, aber ich kann auch VIEW auf ORACLE-Ebene erstellen.

Aber ich kann es nur am Montag testen.
Auf jeden Fall vielen Dank für Deine Hilfe!

Gruß
Tanja

bei Antwort benachrichtigen
basil Tanja80 „SQL-Abfrage“
Optionen

Noch eine Anmerkung, stelle die Frage eventuell einmal im Entwicklerforum, da ist die Chance groß jemanden zu finden, der mit Access arbeitet und die meisten Poster dort sind sehr kompetent.
Entwickler-Forum

bei Antwort benachrichtigen
Borlander Tanja80 „Hallo Basil, für Deine Hilfe möchte ich mich herzlich bedanken. Es sieht...“
Optionen

Hallo Tanja,
probiers mal mit diese Gruppierung:
GROUP BY IF(age>60, '>60', IF(age>30,'30-60', '0-30'))

Mit MySQL funktionierts auf jeden Fall...


CU Borlander

bei Antwort benachrichtigen
Tanja80 Borlander „Hallo Tanja, probiers mal mit diese Gruppierung: GROUP BY IF age 60, 60 , IF age...“
Optionen

Danke Borlander,

ich prüfe es gerade mit Access

bei Antwort benachrichtigen