Benutzer mit den meisten Antworten
Abfrage von Doppelten Einträgen WENN

Frage
-
Hallo,
ich bemühe mich gerade ein wenig mit SQL Datenbankabfragen zu spielen.
Und stoße nun auf ein kleines Problem.
Ich habe eine Tabelle schön mit ID, Name, Anfangsdatum, Enddatum
"Name kann mehrmals vorkommen"
Wenn ich nun eine Abfrage haben möchte:
Zeige mir alle "Namen" an bei denen das "Enddatum" kleiner ist als heute, sollte allerdings der "Name" mehrmals vorkommen und irgendwann das "Enddatum" einmal größer sein als heute dann ignoriere diesen "Namen".
Ist sowas möglich ??
grüße
Cay
Antworten
-
Hallo Cay,
Mit geratenen Relationen - DDL= Data Defintion Language - also für diesen Fall die Create Statements der betroffenden Tabellen:select max(dbmember.membername) as membername
from dbmember
inner join dbMemberContracts on dbmember.id = dbmemberContracts.FKMemberid
group by dbmember.id
having max(dbmembercontracts.Enddatum) < getdate()
HTHGrüße Alexander
- Als Antwort markiert joksch_c Mittwoch, 17. Dezember 2014 08:53
Alle Antworten
-
Hallo,
habe mich nun ein wenig umgesehen und bin zu der Lösung gekommen das es was mit NOT EXISTS zu tun haben muss.
Was ist aber an diesem Querry verkehrt ???
select * from dbMemberContracts where dbMemberContracts.ContractEnd < '14.12.2014' and not exists (select * from dbMemberContracts where dbMemberContracts.ContractEnd > '14.12.2014')
danke
Cay
-
Hallo Cay,
wenn ich deine Anforderung richtig verstehe:
select name
-- , max(Enddatum)
from dbMemberContracts
group by name
having max(Enddatum) < getdate()
Warum hast Du eine ID, wenn der Name mehrfach kommen kann? Die ID sollte der Primary Key sein.
Grüße Alexander
-
Hallo,
hier werden die Contracts der Mitglieder abgespeichert und da jedes Mitglied mehrere Contracts haben kann, die auch schon abgelaufen sind gibt es die Namen Öfter.
Und mit dieser Abfrage möchte ich herrausfinden welches Mitglied keinen aktuellen Contract hat.
Ich hoffe ich bin auf dem richtigen weg.
grüße
Cay
-
Hallo Cay, Sagen wir mal Ein Mitglied heiratet /ändert seinen Namen?
Es scheint günstiger einen Tabelle mit den Mitgliedern zu pflegen. Und in deiner Contract-Tabelle nur deren Primärschlüssel einzusetzten.
Klappt das denn mit der SQL?Grüße Alexander
-
Hallo,
habe ich ja
in der Tabelle MemberContrakt habe ich einen "FKMemberID" die verweist auf den PrimaryKey "ID" in der MemberTabelle.
Aber ich muss ja erstmal die FKMemberID's herrausfinden die entweder keinen Aktuellen Vertrag mehr haben oder aber einen noch haben.
Hoffe ich habe mich verständlich ausgedrückt.
Dein Querry funktioniert nun kann ich mit Hilfe dieser Liste aller MemberNamen heraussuchen.
Schön wäre es wenn ich gleich noch einen "inner join" machen könnte in die Membertabelle.
grüße
Cay
- Bearbeitet joksch_c Mittwoch, 17. Dezember 2014 08:14
-
Hallo Cay,
Mit geratenen Relationen - DDL= Data Defintion Language - also für diesen Fall die Create Statements der betroffenden Tabellen:select max(dbmember.membername) as membername
from dbmember
inner join dbMemberContracts on dbmember.id = dbmemberContracts.FKMemberid
group by dbmember.id
having max(dbmembercontracts.Enddatum) < getdate()
HTHGrüße Alexander
- Als Antwort markiert joksch_c Mittwoch, 17. Dezember 2014 08:53