Sortierproblem in Kombination mit JOIN

flowryan

Grünschnabel

Hallo,

ich habe folgendes Problem, bzw. ich finde keinen funktionierenden Weg:

Ich habe eine Datenbank mit 2 Tabellen angelegt. In dieser Datenbank sollen Prüfdaten für Werkzeuge eingetragen werden. Es soll in der Übersicht auch sortiert werden können... Nach "Werkzeug", "Prüfungsgrund" und "Nächstes Prüfdatum".

Die Datenbank ist folgendermaßen aufgebaut:

Tabelle Werkzeuge:
-Werkzeug_ID (int - auto-increment, Primärschlüssel)
-Werkzeug_Name (varchar)
-Gesperrt (tinyint)

Tabelle Pruefungen:
-Pruef_ID (int - auto-increment, Primärschlüssel)
-Pruef_Grund (varchar)
-Pruef_Datum (date)
-F_Werkzeug_ID (int - Fremdschlüssel, bezieht sich auf die Werkzeugtabelle)

Zwischen der Werkzeug- und der Prüftabelle steht eine 1:n Beziehung (sprich ein Werkzeug kann / soll mehrere Prüfungen haben)


Ich verbinde diese Tabellen mittels JOIN miteinander, die Abfrage sieht wie folgt aus:

Code:
SELECT `Werkzeug_ID`,`Werkzeug_Name`,`Pruef_Grund`,`Pruef_Datum` FROM `Werkzeuge` INNER JOIN `Pruefungen` ON `Werkzeug_ID`=`F_Werkzeug_ID`

Mein Problem ist nun folgendes: Ich möchte nur jeweils die nächststehende Prüfung anzeigen und das Werkzeug soll auch nur einmal in der Liste auftauchen. Wenn ich ein GROUP-BY verwende kann ich es zwar einschränken, jedoch wird mir nicht unbedingt die nächste Prüfung angezeigt, ein ORDER BY hat bisher auch nicht geholfen.

Ich glaub ich hab schlichtweg ein Brett vor'm Kopf...

Würd mich über jede Antwort freuen! DANKESCHÖN :)
 
Zuletzt bearbeitet:
Annahme 1: Du arbeitest mit MySQL
Annahme 2: Du willst das nächste Datum ab Jetzt

Dann könnte das etwa so aussehen
SQL:
SELECT 
	Werkzeug_ID,
	Werkzeug_Name,
	Pruef_Grund,
	Pruef_Datum 
FROM 
	Werkzeuge 
	INNER JOIN Pruefungen 
		ON Werkzeug_ID=F_Werkzeug_ID
	INNER JOIN (SELECT 
					F_Werkzeug_ID AS next_id,
					MIN(Pruef_Datum ) AS next_date
				FROM
					Pruefungen
				WHERE 
					Pruef_Datum > SYSDATE()
				GROUP BY 
					F_Werkzeug_ID) AS next_entry
		ON F_Werkzeug_ID = next_id
		AND Pruef_Datum = next_date
 
Zuletzt bearbeitet von einem Moderator:
YOU MADE MY DAY!

Wunderbar, ich hatte zwar auch schon mit einer SELECT-in-SELECT Abfrage experimentiert, aber auf den Lösungsansatz wäre ich so nicht gekommen!

Tausend Dank dafür :)
 
Zurück