Hi Jana Vorodna,
M_ID = Messungs-(Mengen)-Nummer
MW_? = Meßwert in dieser Menge
M_ID MW_A MW_B MW_C MW_D MW_E 1 100 101 2000 2500 3000 2 100 159 167 2800 2900 3 200 400 600 1100 2200 4 150 180 400 900 3000 Messung 1 will ich nicht haben, weil halt MW_A und MW_B zu nah aneinander sind
Messung 2 will ich nicht, weil MW_B und MW_C zu nah aneinander sind
Messung 4 hat 4 Meßwerte zwischen 100 und 1000 ... passt also nicht auf mein o.d. Schema
Du kannst eine WHERE-Klausel als OR-Konstrukt aller möglichen Fehlersituationen schreiben; wenn Du dieses anschließend negierst, bleiben die gültigen Datensätze übrig.
Bisher habe ich zwei Fehlerursachen gelernt:
a) Wert (n+1) - Wert (n) < epsilon;
b) Wert (n+3) <= 1000 AND Wert (n) >= 100;
Für eine endliche Anzahl von Spalten kannst Du das komplett hinschreiben. Ich nehme mal sechs Spalten, um das Prinzip zu zeigen (allfällige Tippfehler bitte selbst entfernen ;-):
SELECT * FROM table_name
WHERE NOT ( (MW_B - MW_A < epsilon)
OR (MW_C - MW_B < epsilon)
OR (MW_D - MW_C < epsilon)
OR (MW_E - MW_D < epsilon)
OR (MW_F - MW_E < epsilon)
OR (MW_A >= 100 AND MW_D <= 1000)
OR (MW_B >= 100 AND MW_E <= 1000)
OR (MW_C >= 100 AND MW_F <= 1000));
Das sieht schrecklich aus und ist zudem nur bei bekannter Spaltenzahl und bei Verwendung Deines konkreten Datenmodells überhaupt machbar. Aber vielleicht ist es das, was Du suchst?
Eine Lösung in einer algorithmischen Sprache würde eine entsprechende Logik sowohl performanter als auch übersichtlicher mit zwei Schleifen darstellen können.
Viele Grüße
Michael
T'Pol: I apologize if I acted inappropriately.
V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
(sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
=> http://www.peter.in-berlin.de/projekte/selfcode/?code=sh%3A|+fo%3A}+ch%3A]+rl%3A(+br%3A^+n4%3A(+ie%3A%25+mo%3A)+va%3A|+de%3A%2F+zu%3A|+fl%3A(+ss%3A)+ls%3A~+js%3A|
Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.