Dubletten finden im Zeitintervall

fracalifa

Neuer Benutzer
Beiträge
4
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
 
Werbung:
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
 
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


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: https://www.datenbankforum.com/thre...sion-constraints-in-postgresql.909/#post-3851
 
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.
 
Werbung:
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.

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
 
Zurück
Oben