Hallo zusammen,
ich habe wieder ein Access-Problem und bitte um eure Hilfe.
Es werden Artikelprüfungen durchgeführt mit Prüfergebnis ,,Gut" oder ,,Mangelhaft".
Die mit ,,Mangelhaft" geprüften Artikel sollen nochmals geprüft und hierzu in einem Bericht gelistet werden.
Es sollen in diesem Bericht aber nur die Datensätze der neuesten Prüfungen eines Artikel einer Warengruppe angezeigt werden, sofern das Prüfergebnis ,,mangelhaft" ergeben hat.
Wird bei einer Folgeprüfung zu einem späteren Datum das Prüfergebnis ,,Gut" festgestellt, soll dieser Artikel in dem Bericht nicht mehr aufgeführt werden.
Ausgangslage
Artikelnr_ID
Warengruppe
Prüfdatum
Prüfergebnis
Beispiel 1:
Artikelnr_ID 1 Warengruppe 1 Prüfungsdatum 1.1.2016 Prüfergebnis Mangelhaft
>>>Darstellung in Bericht mit dem Datensatz der Prüfung vom 1.1.2016
Beispiel 2:
Artikelnr_ID 2 Warengruppe 2 Prüfungsdatum 2.2.2015 Prüfergebnis Mangelhaft
Artikelnr_ID 2 Warengruppe 2 Prüfungsdatum 2.2.2016 Prüfergebnis Gut
>>>Keine Darstellung im Bericht, da letztes Prüfergebnis ,,Gut" ist
Beispiel 3:
Artikelnr_ID 3 Warengruppe 3 Prüfungsdatum 3.3.2015 Prüfergebnis Mangelhaft
Artikelnr_ID 3 Warengruppe 3 Prüfungsdatum 3.3.2016 Prüfergebnis Mangelhaft
>>>Darstellung in Bericht mit dem Datensatz der Prüfung vom 3.3.2016
Beispiel 4:
Artikelnr_ID 4 Warengruppe 4 Prüfungsdatum 4.4.2015 Prüfergebnis Mangelhaft
Artikelnr_ID 4 Warengruppe 4 Prüfungsdatum 4.4.2016 Prüfergebnis Mangelhaft
Artikelnr_ID 4 Warengruppe 4 Prüfungsdatum 4.4.2017 Prüfergebnis Gut
>>>Keine Darstellung im Bericht, da letztes Prüfungsergebnis ,,Gut" war
Ich habe keine Probleme den Datensatz der letzten Prüfung oder auch der letzten Prüfung mit Prüfergebnis ,,Mangelhaft" darzustellen. Mein Problem ist, wenn die spätere Prüfung ,,Gut" ergibt, dass dann kein Datensatz mehr angegeben werden soll.
Wie muss hierzu die Abfrage lauten?
Ich hoffe, ich konnte mein Problem verständlich und genau genug beschreiben und hoffe jetzt auf eure Hilfe.
Besten Dank im Voraus
Hans
Hallo!
ZitatEs werden Artikelprüfungen durchgeführt mit Prüfergebnis ,,Gut" oder ,,Mangelhaft".
Die mit ,,Mangelhaft" geprüften Artikel sollen nochmals geprüft und hierzu in einem Bericht gelistet werden.
...
Wird bei einer Folgeprüfung zu einem späteren Datum das Prüfergebnis ,,Gut" festgestellt, soll dieser Artikel in dem Bericht nicht mehr aufgeführt werden.
Wenn ich das richtig verstehe, wird nicht ein Artikel nicht mehr geprüft, wenn das Prüfergebnis "Gut" war.
Somit könnte eventuell als Bedingung ausreichen, dass vom Artikel keine Gut-Prüfung vorhanden ist. Das würde das Kriterium "letzte Prüfung" vermeiden, welche zwar machbar ist, aber eventuell etwas mehr Laufzeit benötigen wird.
ZitatIch habe keine Probleme den Datensatz der letzten Prüfung oder auch der letzten Prüfung mit Prüfergebnis ,,Mangelhaft" darzustellen. Mein Problem ist, wenn die spätere Prüfung ,,Gut" ergibt, dass dann kein Datensatz mehr angegeben werden soll.
Wenn du die Datensätze ermitteln kannst, die als letzte Prüfung "mangelhaft" enthalten, dann sind jene bereits ausgeschlossen, deren letzte Prüfung "gut" ist.
Du hast somit bereits die fertige Lösung, da du kein Problem hast, die Datensätze mit der letzten Prüfung mit Ergebnis Mangelhaft herauszufiltern. ;)
Trotzdem noch SQL-Anweisungen:
Bedingung: Es gibt nur mangelhafte Prüfungen zum Artikel
select
A.Artikelnr_ID, Max(Prüfdatum) as LetztesPruefdatum
from
ArtikelPruefTabelle A
where
A.Prüfergebnis = 'Mangelhaft'
and
not exists (select * from Artikeltabelle Ax where Ax.Artikelnr_ID = A.Artikelnr_ID and Ax.Prüfergebnis = 'Gut')
group by
A.Artikelnr_ID
Bedingung: letzte Prüfung ist mangelhaft
select
A.*
from
(
select Artikelnr_ID, Max(Prüfdatum) as LetztesPruefdatum
from ArtikelPruefTabelle
group by Artikelnr_ID
) LP
inner join
Artikeltabelle A ON A.Artikelnr_ID = LP.Artikelnr_ID and A.Prüfdatum = LP.LetztesPruefdatum
where
A.Prüfergebnis = 'Mangelhaft'
Anm.: ich gehe davon aus, dass Artikelnr_ID zur Lieferware (inkl Seriennummer oder Charge) gehört und nicht die Kennung vom Teilestamm ist.
mfg
Josef
Hallo Josef,
vielen Dank für deine schnelle Antwort.
Leider komm ich noch nicht so ganz weiter, siehe meine Anmerkungen zu deinen Zitaten.
Vielleicht kannst du bitte nochmals darüber schauen.
Vielen Dank
Hans
__________________
Zitat von: Josef P. am Januar 27, 2019, 11:51:28
Hallo!
ZitatEs werden Artikelprüfungen durchgeführt mit Prüfergebnis ,,Gut" oder ,,Mangelhaft".
Die mit ,,Mangelhaft" geprüften Artikel sollen nochmals geprüft und hierzu in einem Bericht gelistet werden.
...
Wird bei einer Folgeprüfung zu einem späteren Datum das Prüfergebnis ,,Gut" festgestellt, soll dieser Artikel in dem Bericht nicht mehr aufgeführt werden.
Wenn ich das richtig verstehe, wird nicht ein Artikel nicht mehr geprüft, wenn das Prüfergebnis "Gut" war.
Somit könnte eventuell als Bedingung ausreichen, dass vom Artikel keine Gut-Prüfung vorhanden ist. Das würde das Kriterium "letzte Prüfung" vermeiden, welche zwar machbar ist, aber eventuell etwas mehr Laufzeit benötigen wird.
Ergänzung: Die Artikel werden jährlich laufend geprüft. Es kann im Jahr 2015 mit "Gut" geprüft worden sein, dann wird er routinemäßig wieder in einem Jahr (2016) geprüft, falls "Mangelhaft" erfolgt eine Sonderprüfung in einem kürzeren Abstand. Die Bedingung "Keine Gut-Prüfung" funktioniert somit leider nicht.
Es muss auf die "letzte Prüfung" geprüft werden und ob deren Ergebnis "Gut" oder "Mangelhaft" ist. Die Laufzeit spielt keine Rolle, da es nur einige wenige Tausend Artikel sind.
ZitatIch habe keine Probleme den Datensatz der letzten Prüfung oder auch der letzten Prüfung mit Prüfergebnis ,,Mangelhaft" darzustellen. Mein Problem ist, wenn die spätere Prüfung ,,Gut" ergibt, dass dann kein Datensatz mehr angegeben werden soll.
Wenn du die Datensätze ermitteln kannst, die als letzte Prüfung "mangelhaft" enthalten, dann sind jene bereits ausgeschlossen, deren letzte Prüfung "gut" ist.
Du hast somit bereits die fertige Lösung, da du kein Problem hast, die Datensätze mit der letzten Prüfung mit Ergebnis Mangelhaft herauszufiltern. ;)
Ergänzung: Das habe ich vielleicht missverständlich ausgedrückt. Ich kann zwar die letzte "mangelhafte" Prüfung herausfiltern, aber eben nicht, ob die letzte Prüfung "Mangelhaft" war. Das ist mein Problem. Wenn ich feststellen könnte, dass die Prüfung mit dem letzten Prüfungsdatum "Gut" ist, dann sollte mein Problem gelöst sein.
Trotzdem noch SQL-Anweisungen:
Bedingung: Es gibt nur mangelhafte Prüfungen zum Artikel
select
A.Artikelnr_ID, Max(Prüfdatum) as LetztesPruefdatum
from
ArtikelPruefTabelle A
where
A.Prüfergebnis = 'Mangelhaft'
and
not exists (select * from Artikeltabelle Ax where Ax.Artikelnr_ID = A.Artikelnr_ID and Ax.Prüfergebnis = 'Gut')
group by
A.Artikelnr_ID
Bedingung: letzte Prüfung ist mangelhaft
select
A.*
from
(
select Artikelnr_ID, Max(Prüfdatum) as LetztesPruefdatum
from ArtikelPruefTabelle
group by Artikelnr_ID
) LP
inner join
Artikeltabelle A ON A.Artikelnr_ID = LP.Artikelnr_ID and A.Prüfdatum = LP.LetztesPruefdatum
where
A.Prüfergebnis = 'Mangelhaft'
Anm.: ich gehe davon aus, dass Artikelnr_ID zur Lieferware (inkl Seriennummer oder Charge) gehört und nicht die Kennung vom Teilestamm ist.
mfg
Josef
Hallo Hans,
Zitataber eben nicht, ob die letzte Prüfung "Mangelhaft" war.
Wieso nicht? Josefs zweite Abfrage zeigt doch genau das; - alle letzten
Prüftermine, die als Ergebnis "mangelhaft" ausweisen.
gruss ekkehard
Danke Ekkehard,
wenn die Abfrage stimmt, dann muss ich noch irgendwo einen Fehler eingebaut haben.
Ich werde es nochmals sorgfältig probieren.
Vorab schon mal besten Dank an "Alle"
Hans
Die Logik sollte passten - statt ArtikelTabelle muss aber ArtikelPruefTabelle stehen.
select
A.*
from
(
select Artikelnr_ID, Max(Prüfdatum) as LetztesPruefdatum
from ArtikelPruefTabelle
group by Artikelnr_ID
) LP
inner join
ArtikelPruefTabelle A ON A.Artikelnr_ID = LP.Artikelnr_ID
and A.Prüfdatum = LP.LetztesPruefdatum
where
A.Prüfergebnis = 'Mangelhaft'
mfg
Josef
Hallo zusammen,
ja jetzt funktioniert es wie angedacht (der Fehler lag bei mir) - nochmals besten Dank
Nochmals vielen Dank für die gute Hilfe
Hans