Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Anzeige Datensatz mit neuestem Datum, in Bezug auf Bedingung des älteren DS

Begonnen von Accessoraner, Januar 27, 2019, 11:30:48

⏪ vorheriges - nächstes ⏩

Accessoraner

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

Josef P.

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

Accessoraner

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

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Accessoraner

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

Josef P.

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

Accessoraner

#6
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