SQL zweit höchstes Datum aus 3 Tabellen

Mitglied: BlueEyePhoenix

BlueEyePhoenix (Level 1) - Jetzt verbinden

08.04.2021 um 14:13 Uhr, 309 Aufrufe, 3 Kommentare

Hallo Community,

ich habe da ein Problem und zwar will ich aus mit einer SQL Abfrage einem Objekt aus einer Datenbank ein Datum zuweisen von der vorletzten Bearbeitung. Diese Datum ist mit der Tabelle aber leider nicht direkt zu erreichen.

Tabelle1: Objekttabelle
Objektnummer Objektname
1 Haus
2 Garten
3 Hof

Tabelle2: Objektverwendung
Objektnummer, Objektbearbeitung
1 10
2 12
3 13

Tabelle3: Objektbearbeitung
Objektbearbeitung, Datum, Bereich
10 15.01.2020 1
10 25.02.2020 1
10 20.03.2020 2
10 20.04.2020 1

So sind die Tabellen grob aufgebaut. Davon hätte ich gern angezeigt:
Objektnummer Datum Bereich
10 25.02.2020 1

Folgendes habe ich versucht

Angezeigt bekomme ich aber immer den 20.04.2020 statt dem 25.02.2020. Habe schon viele Foren durch aber bekomme irgendwie immer nur das erste Datum angezeigt und hoffe das es jemanden gibt der meinen Denkfehler sieht.

Hilfe wäre echt super

Vielen Dank
Mitglied: em-pie
LÖSUNG 08.04.2021, aktualisiert um 14:47 Uhr
Moin,

eine Variante wäre, wenn du dein Sub-Select des Left-Joins um eine Einschränkung ergänzt (die spalte cumulate soll dir nur zeigen, was da eigentlich passiert.:

Das Statement ist Funktionsfähig für einen MSSQL. hast du eine anderes DBMS, musst du danach selbst einmal schauen.

Gruß
em-pie
Bitte warten ..
Mitglied: HansDampf06
08.04.2021, aktualisiert um 15:40 Uhr
Dein "Fehler" in der Abfrage ist meiner Meinung nach:


where ...
and c.Datum < (select max(Datum) from Objektbearbeitung)


Einerseits fragst Du das maximale Datum über alle Zeilen der Tabelle ab, obschon Du gedanklich eigentlich eine differenzierte Betrachtung meinst: Objektnummer, Bereich, MAX(Datum).

Andererseits ist es besser, die Unterabfrage aus der WHERE-Klausel in eine JOIN-Klausel zu verschieben:

LEFT JOIN (SELECT Objektbearbeitung, Bereich, MAX(Datum) FROM Objektbearbeitung GROUP BY Objektbearbeitung, Bereich) AS D ON C.Objektbearbeitung = D.Objektbearbeitung AND C.Bereich = D.Bereich

und dann die Bedingung in der WHERE-Klausel entsprechend anzupassen:

AND C.Datum < D.Datum

Das ist auch beim Debugging der Abfrage hinsichtlich ihrer möglichen und tatsächlichen Ergebnisse sinnvoller.

Viel Erfolg
HansDampf06
Bitte warten ..
Mitglied: mbehrens
08.04.2021 um 17:42 Uhr
Wie wäre folgender Ansatz:


Bitte warten ..
Heiß diskutierte Inhalte
Netzwerkgrundlagen
Frage der anderen Art
NeuerleVor 1 TagFrageNetzwerkgrundlagen16 Kommentare

Hi an alle, Ich bin InformatikStudi. Habe Ende des Monats Klausur im Fach Netzwerke zu schreiben und komme gar nicht klar. Entweder ich bin ...

Ubuntu
Cups-Server mit SMB lehnt Verbindungen ab (smb.conf)?
ErikHeinemannVor 1 TagFrageUbuntu17 Kommentare

Guten Morgen, ich habe einen Ubuntu 20.04 Server mit Cups als Printspooler. Nun Soll noch Samba hinzugefügt werden für eine einfache Verwendung unter Windows. ...

Exchange Server
Kaspersky for Exchange Meldungen
gelöst wieoderwasVor 1 TagFrageExchange Server11 Kommentare

Guten Morgen, wir haben bei uns einen Exchange 2013 mit Kaspersky for Exchange und Sophos auf Dateiebene. Heute Morgen habe ich einige von diesen ...

Groupware
Lokale Mini-Groupware für Mail, Adressbuch und Kalender gesucht
AndreasKasselVor 1 TagFrageGroupware10 Kommentare

Hallo zusammen, ich habe insgesamt 2 PCs, 1 Notebook, 1 Android-Tablet und ein Android-Smartphone. Weiterhin habe ich 2 Mail-Adressen bei 1&1 mit einer eigenen ...

Grafikkarten & Monitore
Unerklärliche Aussetzer Bildschirm und Maus
nixwissenderVor 1 TagFrageGrafikkarten & Monitore10 Kommentare

hallo! wir haben aktuell das unerklärliche phänomen, dass sich am arbeitsplatz vom mitarbeiter eines der beiden bildschirme kurzzeitig ausschaltet (und zwar der, der per ...

CPU, RAM, Mainboards
CPU Lüfter ausbauen
gelöst ben1300Vor 1 TagFrageCPU, RAM, Mainboards9 Kommentare

Hallo zusammen, ich habe mir damals einen Fertig PC gekauft. Ich würde gerne den Arbeitsspeichern austauschen, allerdings muss ich dafür - so wie es ...

Backup
Backup Datei
gelöst KanrishaVor 1 TagFrageBackup5 Kommentare

Hallo Zusammen, ich habe eine Frage ich will eine Backup bat Datei schreiben habe jedoch ein kleines Problem. Ich möchte ein Laufwerk in das ...

DNS
Android 10 und mein DNS Server
gelöst CyborgWeaselVor 1 TagFrageDNS7 Kommentare

Hallo allesamt, ich spiele gerade etwas mit einer Synology herum, habe unter Anderem einen eigenen DNS jetzt aufgesetzt. Die lokale Domäne ist HomeDomain.local und ...