Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Dubletten finden im Zeitintervall

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von fracalifa, 26 Februar 2014.

  1. fracalifa

    fracalifa Neuer Benutzer

    Hi,

    ich habe eine Tabelle [dbo].buchverleih mit 3 Spalten
    BuchNr (VARCHAR(10))
    Start (Smalldatetime)
    Ende (Smalldatetime)

    Es ist sichergestellt, dass Start < Ende gilt.

    Ich suche eine/mehrere Abfrage(n) oder Funktionen, die mir Dubletten findet, wenn es BuchNr gibt, die eine Überschneidung oder Überlagerung in den Zeitintervallen haben.
    d.h. Ich muss sicherstellen, dass ein Buch nicht zwei- oder mehrfach zeitgleich verliehen wird. Start und Ende haben immer definierte Werte (kein NULL).

    Wie gehe ich am besten vor ?
    Vielen Dank
    Gruss Frank
     
  2. Hony%

    Hony% Datenbank-Guru

    Da wäre die Möglichkeit eines Joins:
    Code:
    SELECT *
    FROM [dbo].buchverleih AS A
    INNER JOIN [dbo].buchverleih AS B
    ON A.BuchNr = B.BuchNr
    AND A.Start < B.Start
    AND B.Start < A.Ende
    Gruß Hony
     
  3. akretschmer

    akretschmer Datenbank-Guru


    Eine Lösung von @Hony% hast ja, aber eigentlich ist das ja keine Lösung, weil sie nicht verhindert, daß solch 'Datenmüll' in der DB landet.
    Es gibt aber auch Möglichkeiten, durch Constraints solch 'Doppelbuchungen' zu vermeiden. Das Problem ist ja nicht so selten:

    • das doppelt vergebene Hotelzimmer verärgert die Gäste
    • das doppelt vergebene Auto der Autovermietung verprellt die Kunden
    • das doppelt belegte Besprechungszimmer verärgert das Team
    • der Lehrer, der zeitgleich 2 Klasesen unterrichten soll, sorgt bei einem Teil der Schüler für Freude wegen Unterrichtsausfall

    Die Lösung hab ich schon mal erklärt: http://www.datenbankforum.com/threa...sion-constraints-in-postgresql.909/#post-3851
     
  4. ukulele

    ukulele Datenbank-Guru

    Eigentlich ist die Frage auch etwas unklar formuliert. Willst du deine Datenbank auf doppelte Einträge prüfen die schon vorhanden sind oder willst du, wie von akretschmer empfohlen, vor dem schreiben in die Datenbank eine bestimmte Nummer abfragen. Letzteres läßt sich am sinnvollsten mit CONSTRAINTS oder eine EXISTS Abfrage lösen, sofern die Anwendung und nicht die DB die Prüfung übernehmen soll.
     
  5. fracalifa

    fracalifa Neuer Benutzer

    Hi,

    vielen Dank an alle für die schnellen Antworten !!
    Beides muss ich machen.
    Zunächst muss ich den Datenbestand bereinigen und danach verhindern, dass Dubletten oberer Bedingung
    gespeichert werden können.

    Werde Eure Vorschläge testen.

    Vielen Dank
    LG
    Frank
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden