Hallo, ich muss in einer Abfrage Werte innerhalb einer Spalte auswerten und in einer neuen Tabelle/Abfrage anzeigen.
Beispiel: 5 Temperaturfühler mit je einem Messwert
Abfrage
NR Messwert
1 100,02
2 100,05
3 100,00
4 100,07
5 100,15
es können bis zu 50 Fühler sein. Nun müssen alle Fühler mit einer Anweichung +- 0,02 gepaart werden.
Das Ergebnis wäre
Paar 1 NR 1+3
Paar 2 NR 2+4
Kann mir jemand helfen?
SELECT
T1.ID,
T1.Messwert,
T2.Messwert
FROM
TableX AS T1,
TableX AS T2
WHERE
T1.ID < T2.ID
AND
Abs(T1.Messwert - T2.Messwert) <= 0.02
Hallo Eberhard,
ich komme leider mit dem Code nicht klar.
Ich habe nur eine Spalte NR und eine Spalte Messwerte in meiner Abfrage. Basis ist meine Tabelle Messwerte.
Ich habe kein T1 oder T2.
Gruß
Frank
Hallo,
T1 und T2 sind Aliasnamen Deiner einen Tabelle.
Ersetze Tabellen- und Feldnamen durch die bei Dir vorhanden Namen.
Hallo Klaus, so sieht mein Ergebnis aus. Nich brauchbar.
PA T1.Nr T1.Prüf_A T2.Nr T2.Prüf_A
225240/10 2 138,05 4 138,05
225240/10 1 137,96 5 137,95
225240/10 1 137,96 6 137,95
225240/10 5 137,95 6 137,95
225240/10 1 137,96 8 137,97
225240/10 11 137,87 14 137,86
225240/10 2 138,05 16 138,05
225240/10 4 138,05 16 138,05
225240/10 9 138,31 17 138,31
225240/10 1 137,96 18 137,98
225240/10 8 137,97 18 137,98
Jeder Fühler(Nr) darf nur einmal erscheinen, im besten Fall sind es 9 Fühler-Paare
Gruß
Frank
Nachtrag.
So muss es aussehen:
PA T1.Nr T1.Prüf_A T2.Nr T2.Prüf_A
225240/10 17 138,31 9 138,31
225240/10 3 138,26 12 138,13
225240/10 13 138,11 2 138,05
225240/10 16 138,05 5 138,05
225240/10 18 137,98 8 137,97
225240/10 1 137,96 6 137,95
225240/10 10 137,92 11 137,87
225240/10 14 137,89 4 137,85
225240/10 20 137,80 19 137,76
225240/10 21 137,44 15 137,40
Gruß
Frank
ZitatSo muss es aussehen:
Bei sechs von 10 Paaren ist die Differenz größer 0,02.
Das ist eine überzeugende Umsetzung der eigenen Vorgabe.
Mein Fehler, habe die Werte per Hand zusammengestellt, aber in der Form sollte das Ergebnis sein.
Gruß
Frank
Zitat von: Labor am März 22, 2023, 16:57:25eder Fühler(Nr) darf nur einmal erscheinen
Vielleicht erklärst du auch die Hintergründe etwas.
Was ist wenn sich mit einem Wert verschiedene Paare bilden lassen - nach welcher Logik soll dann vorgegangen werden?
Du solltest die Angelegenheit erstmal durchdenken bevor es mit dem Programmieren losgeht und nicht erst am Schuss mit weiteren Bedingungen daherkommen. ;)
Die "nicht brauchbare" Abfrage liefert die Paare mit der geforderten Maximalabweichung, alle Paare, die damit denkbar sind - was nebenbei Prinzip von SQL (Massendatenverarbeitung) ist.
Aus diesen kannst Du nun entsprechend Deinen unbekannten Kriterien die gewünschten auswählen. Bei Fühler 1 bis 18 hast Du sichtbar nur noch aus 11 Paaren statt aus rechnerisch möglichen 153 auszuwählen. Mancher würde das als Fortschritt bezeichnen.
Bei 50 hätte man 1225 rechnerische Paare.
Da die konkreten Kriterien noch nicht vernehmbar formuliert sind, recht wahrscheinlich noch nicht einmal im eigenen Kopf klar sind, sollte die Hoffnung nicht sehr groß sein, dass Du eine Lösung vorgelegt bekommst, wie Du sie Dir vorstellst. Der Vergleich mit unbekannt gibt unbekannt.
Beantworte im Gegenzug die Frage nach Brauchbarkeit Deiner Aufgabenformulierung.
Ganz einfach, die beiden hösten Werte von zwei Fühlern bei den die Abweichnung <0,02 ist, bilden ein Paar.
Danach die beiden nächste Fühler usw.
Deswegen wäre es gut, wenn das erste Paar aus der Liste in einen neue Tabelle verschoben wird.
Gruß
Frank
Zitat von: Labor am März 23, 2023, 18:08:18Ganz einfach
Na dann könntest du ja auch eine ganz Einfache Lösung umsetzen.
Ein zusätzliches Feld für die Paarungen erstellen.
Recordset sortiert öffnen und per VBA die Paarungen bilden.
Die Logik ist da trivial du vergleichst einfach die Elemente nach ihrer Reihenfolge und wenn die Abstände passen machst du ein Paar draus.
Wenn da mehr als 20000 Paarungen sein, kann man danach auch über eine effizientere Lösung nachdenken.
Erstmal solltest du aber mal überhaupt etwas umsetzen.
Solltest du es nicht schaffen, dann zeig zumindest deinen Versuch.
Hallo, hatte leider keinen Zeit mich damit zu beschäftigen.
Ich habe eine funktionierende Abfrage in einem Formular.
Paarung1-Unterformular
PA T1.Prüf_A T2.Nr T2.Prüf_A T1.Nr diff
225240/10 138,31 17 138,31 9 0,00
225240/10 138,05 16 138,05 5 0,00
225240/10 138,05 16 138,05 2 0,00
225240/10 138,05 5 138,05 2 0,00
225240/10 137,97 18 137,98 8 -0,01
225240/10 137,96 8 137,97 1 -0,01
225240/10 137,96 6 137,95 1 0,01
225240/10 137,96 18 137,98 1 -0,02
225240/10 137,87 14 137,86 11 0,01
225240/10 137,85 14 137,86 4 -0,01
225240/10 137,85 11 137,87 4 -0,02
Nun möchte ich die erste Zeile in die Tabelle TabPaarung kopieren und diese kopierte Zeile aus der Abfrage bzw. dazu gehörigen Tabelle löschen. Damit verschwinde auch die noch möglichen doppelten Kombinationen.
Wenn ich das ganze manuel mache geht es natürliche. Ziel ist es aber, per Button im Formular es automatisch durchlaufen zu lassen. Ich finde hier leider keinen Ansatz. Könnt Ihr mir helfen.
Grundlagen - SQL ist leicht (23) - Bedingte Zweierkombinationen mit einmaligen Elementen bilden (https://www.ms-office-forum.net/forum/showthread.php?t=385196)
ZitatIch habe eine funktionierende Abfrage
Womöglich wäre es ratsam, diesen Deinen zauberhaften Einfall auch öffentlich zu zeigen.
Hallo Eberhard, super das Du meine Aufgabenstellung in "Grundlagen-SQL ist leicht" übernommen hast.
Ich habe nun nur das Problem mit dem VBA Code. Wenn ich die 2. Abfrage öffne bekomme ich die Fehlermeldung
"..das Datenbankmodul findet die Eingabetabelle oder Abfrage "tmptSelection" nicht....". Wird der VBA Code automatisch aufgerufen oder muss ich den noch irgendwie aktinvieren?
Gruß
Frank
Zitatfindet die Eingabetabelle ... "tmptSelection" nicht....
Die Tabelle tmptSelection muss selbst und einmalig angelegt werden. Dann wird sie auch gefunden.
Hallo Eberhard,
bin ich auch schon drauf gekommen, welche Felder muss ich dort eintragen? Nur IDX und ID?
Gruß
Frank
Hallo Eberhard, erstmal ein Kompliement für Deinen "SQL ist leicht" Beiträge. Die sind super erklärt und mit den Beispielen kann man viele lernen!!
Die Abfrage funktioniert!!
Danke.
Gruß
Frank