Wäre vielleicht gar nicht scher ... (Access)

simon1961, Samstag, 16.03.2019, 10:28 (vor 188 Tagen)

Hallo, habe eine große Bitte!

Bin ja wirklich kein Profi, arbeite aber schon lange erfolgreich mit einer selbst gebastelten Datenbank und habe heute folgendes Problem:

Habe in einer Tabelle unter anderen folgende Felder:

Wohnung
Anreise
Abreise

Kann man eine Abfrage erstellen, wo alle Wohnungen anzeigt werden, die sozusagen doppelt belegt sind (Überschneidungen des Aufenthaltes)?

Klingt nicht schwer, aber mit meinen Kenntnissen einfach nicht möglich ...

Danke, danke, danke!

Wäre vielleicht gar nicht scher ...

Martin Asal @, Sonntag, 17.03.2019, 12:23 (vor 187 Tagen) @ simon1961

Hallo Simon,

hier im Tutorial wird ja auch der "Zwischen"-Operator erklärt. Um es mal einfach mit einer Parameterabfrage zu lösen:

SELECT *
FROM Tabelle
WHERE Datum BETWEEN Anreise AND Abreise;

Martin

Wäre vielleicht gar nicht schwer ...

simon1961, Dienstag, 19.03.2019, 09:29 (vor 185 Tagen) @ Martin Asal

Hallo Martin,
danke für die Antwort, ich habe mich aber höchstwahrscheinlich nicht klar genug ausgedrückt. Habe eine Tabelle mit einigen Feldern, unter anderen auch:

Wohnung
Anreise
Abreise

Folgende Einträge sind z. B. vorhanden:
Wohnung Anreise Abreise
105 12.03.2019 20.03.2019
106 14.03.2019 21.03.2019
108 15.03.2019 22.03.2019
106 18.03.2019 24.03.2019

Die Abfrage sollte nun folgendes Ergebnis bringen:
106 18.03.2019 21.03.2019

... weil eben genau dieser Zeitraum für Wohnung 106 doppelt ist!

Danke, danke, danke!

Gruß
Simon

Wäre vielleicht gar nicht schwer ...

Martin Asal @, Dienstag, 19.03.2019, 12:03 (vor 185 Tagen) @ simon1961

Hallo Simon,

dann ist die Sache doch nicht so einfach. Hier muss man mit einer Unterabfrage arbeiten (Ich gehe davon aus, dass deine Tabelle "Vermietungen" heißt):

SELECT *
FROM Vermietungen
WHERE Wohnung IN
(
    SELECT Wohnung
    FROM Vermietungen AS Doppelte
    WHERE (Doppelte.Anreise BETWEEN Vermietungen.Anreise AND Vermietungen.Abreise)
       OR (Doppelte.Abreise BETWEEN Vermietungen.Anreise AND Vermietungen.Abreise)
    GROUP BY Doppelte.Wohnung
    HAVING COUNT(Doppelte.Wohnung)>1
);

Probier mal aus, ob es auch ohne die Zeile mit dem "OR" klappt.

Martin

Wäre vielleicht gar nicht schwer ...

simon1961, Dienstag, 19.03.2019, 15:37 (vor 185 Tagen) @ Martin Asal

Hallo Martin,

danke für deine Bemühungen und deine Geduld.
Verstehe deinen Code zwar nicht, aber habe ihn in meiner Datenbank zum Testen in eine neue Abfrage integriert von A_BelegungKontrolleAlle

SELECT A_BelegungKontrolleAlle.Wohnung, *
FROM A_BelegungKontrolleAlle
WHERE (((A_BelegungKontrolleAlle.Wohnung) In (SELECT Wohnung
FROM A_BelegungKontrolleAlle As Doppelte
WHERE (Doppelte.Ankunft Between A_BelegungKontrolleAlle.Ankunft AND A_BelegungKontrolleAlle.Abreise)
GROUP BY Doppelte.Wohnung
HAVING Count(Doppelte.Wohnung)>1
)));


Es kommt auch eine fehlerlose Auswertung, aber leider zu viele Datensätze. Etwas ist noch nicht korrekt. Ich kann es noch nicht sagen, was so ausgewertet wird, aber derzeit habe ich 220 von 545 Datensätzen in der Auswertung ... ???
Richtig dürfte es nur ein Datensatz (zum Testen) sein.

Was habe ich da wohl falsch gemacht?

Gruß aus Tirol
Simon

Wäre vielleicht gar nicht schwer ...

Martin Asal @, Mittwoch, 20.03.2019, 16:43 (vor 184 Tagen) @ simon1961

Es sollten alle Datensätze ausgegeben werden, bei denen es Überschneidungen gibt. Sortiere mal nach Wohnung und Datum.

Martin

Wäre vielleicht gar nicht schwer ...

simon1961, Donnerstag, 21.03.2019, 08:15 (vor 183 Tagen) @ Martin Asal

Hallo Martin,

danke für deine Bemühungen! Ich habe aufgegeben!
Vielleicht liegt es auch daran, dass ich noch mit ACCESS2000 arbeite ...

Gruß
Simon

Wäre vielleicht gar nicht schwer ...

Martin Asal @, Donnerstag, 21.03.2019, 10:54 (vor 183 Tagen) @ simon1961

Hallo Simon,

kein Grund aufzugeben, und die Accessversion spielt keine Rolle.

Schau dir die Ergebnisse einfach genauer an: Das ist nicht ganz das, was dir ursprünglich vorgeschwebt hat, sondern eben Datensätze, die sich zeitlich überschneiden. Für jede Überschneidung werden also 2 Datensätze angezeigt, bzw, wenn eine Wohnung dreifach vermietet wurde, eben 3.

Aber natürlich sollte die Datenbank es erst gar nicht ermöglichen, dass eine Wohnung doppelt vermietet wird. Das ist am einfachsten mit etwas Code bei der Datenerfassung im Formular umsetzbar.

Martin

Wäre vielleicht gar nicht schwer ...

simon1961, Donnerstag, 21.03.2019, 16:23 (vor 183 Tagen) @ Martin Asal

Hallo Martin,
danke nochmals für deine Antwort.
Die Zeilen haben mich wieder motiviert, es nochmals zu versuchen.
Die Auswertung habe ich wieder, der Code ist fehlerfrei.
Hab mir das Ergebnis jetzt genauer angesehen, kann aber keinen sinnvollen Hintergrund erkennen. Vielleicht kann man das Ergebnis noch eingrenzen unter dem Aspekt, dass Überschneidungen von 1 Tag sinnvoll und erlaubt sind (An- und Abreise am selben Tag ist üblich)?
Werde mich noch etwas genauer mit dem Code befassen, vielleicht sehe ich etwas ...
Danke, danke, danke für deine Bemühungen.

Gruß aus Tirol
Simon

Wäre vielleicht gar nicht schwer ...

Martin Asal @, Donnerstag, 21.03.2019, 19:03 (vor 183 Tagen) @ simon1961

Vielleicht kann man das Ergebnis noch eingrenzen unter dem Aspekt, dass Überschneidungen von 1 Tag sinnvoll und erlaubt sind (An- und Abreise am selben Tag ist üblich)

Du solltest dich zuerst einmal damit auseinandersetzen, wie ein Datum intern überhaupt gespeichert wird. eine gute Erklärung dazu gibts im VBA-Tutorial.

Davon ausgehend, könnte man also zu den gespeicherten Datumsangaben Uhrzeiten addieren. Die Abreise setzt man immer auf 06:00 morgens, die Anreise auf 18:00 abends. Dann könnte eine Abfrage etwa so aussehen:

BETWEEN ([Anreise]+0.75) AND ([ABREISE] +0.25)

Martin

RSS-Feed dieser Diskussion
powered by my little forum