none
Abfrage von Doppelten Einträgen WENN RRS feed

  • 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

    Dienstag, 16. Dezember 2014 13:23

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()
    HTH

    Grüße Alexander

    • Als Antwort markiert joksch_c Mittwoch, 17. Dezember 2014 08:53
    Mittwoch, 17. Dezember 2014 08:48

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

    Mittwoch, 17. Dezember 2014 07:23
  • 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

    Mittwoch, 17. Dezember 2014 07:41
  • 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

    Mittwoch, 17. Dezember 2014 07:52
  • 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

    Mittwoch, 17. Dezember 2014 07:59
  • 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
    Mittwoch, 17. Dezember 2014 08:14
  • Hallo,

    hilfreich wäre die DDL Statements der vorhandenen Tabellen und ein paar Beispieldaten als SQL Statement, dann kann konkreter helfen als nur anhand der verbalen Beschreibung.


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Mittwoch, 17. Dezember 2014 08:23
  • Hallo,

    bekommst du gerne von mir wenn du mir sagst was DDL bedeutet.

    grüße

    Cay

    Mittwoch, 17. Dezember 2014 08:33
  • 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()
    HTH

    Grüße Alexander

    • Als Antwort markiert joksch_c Mittwoch, 17. Dezember 2014 08:53
    Mittwoch, 17. Dezember 2014 08:48
  • Ah,

    danke für die hilfe bei DDL.

    Kann ich nachträglich leifern kein problem aber deine Lösung ist das was ich gesucht habe.

    danke

    Cay

    Mittwoch, 17. Dezember 2014 08:53