Angenäherten Wert eintragen

Angenäherten Wert eintragen

am 08.01.2006 20:17:54 von usenet

Hallo zusammen,

ich muss in eine Table Messwerte eintragen und möchte starke
Werteschwankungen unterbinden.

INSERT INTO tablename (zahlenwert) VALUE (20);
INSERT INTO tablename (zahlenwert) VALUE (22);
INSERT INTO tablename (zahlenwert) VALUE (16);
INSERT INTO tablename (zahlenwert) VALUE (19);
INSERT INTO tablename (zahlenwert) VALUE (80); <<<<<<<
INSERT INTO tablename (zahlenwert) VALUE (21);
INSERT INTO tablename (zahlenwert) VALUE (19);

Normalerweise haben die Werte eine Toleranz von max. 20-30%.
Kann man bei einem INSERT eine Abweichung von mehr als 20-30%
unterbinden, damit es dann (80) nur um einen bestimmten Wert gegenüber
den letzten 2-3 Einträgen abweichen darf ?

Kann man sowas direkt in MySQL machen, oder muss das vorher schon
erledigt werden.

Besten Dank für Hilfe

Re: Angenäherten Wert eintragen

am 09.01.2006 09:57:24 von Christian Kirsch

usenet@schani.com schrieb:
> Hallo zusammen,
>
> ich muss in eine Table Messwerte eintragen und möchte starke
> Werteschwankungen unterbinden.
>
> INSERT INTO tablename (zahlenwert) VALUE (20);
> INSERT INTO tablename (zahlenwert) VALUE (22);
> INSERT INTO tablename (zahlenwert) VALUE (16);
> INSERT INTO tablename (zahlenwert) VALUE (19);
> INSERT INTO tablename (zahlenwert) VALUE (80); <<<<<<<
> INSERT INTO tablename (zahlenwert) VALUE (21);
> INSERT INTO tablename (zahlenwert) VALUE (19);
>
> Normalerweise haben die Werte eine Toleranz von max. 20-30%.
> Kann man bei einem INSERT eine Abweichung von mehr als 20-30%
> unterbinden, damit es dann (80) nur um einen bestimmten Wert gegenüber
> den letzten 2-3 Einträgen abweichen darf ?
>
> Kann man sowas direkt in MySQL machen, oder muss das vorher schon
> erledigt werden.

Du könntest einen Trigger benutzen. Allerdings finde ich aus
methodischen Gründen so ein Vorgehen zweifelhaft. Was, wenn die Werte
mit 85, 90, 100, 120 weitergehen, weil der Druck im Kessel plötzlich
steigt? Möchtest Du die dann auch wegwerfen, weil sie nicht in Dein
Konzept von "Abweichung" passen? M.E. sollte man sowas machen, nachdem
man alles gemessen hat, was es zu messen gibt.

Re: Angenäherten Wert eintragen

am 09.01.2006 10:25:57 von Dominik Echterbruch

usenet@schani.com wrote:
^^^^^^^^^^^^^^^^^
Wer?

> ich muss in eine Table Messwerte eintragen und möchte starke
> Werteschwankungen unterbinden.
>
> INSERT INTO tablename (zahlenwert) VALUE (20);
> INSERT INTO tablename (zahlenwert) VALUE (22);
> INSERT INTO tablename (zahlenwert) VALUE (16);
> INSERT INTO tablename (zahlenwert) VALUE (19);
> INSERT INTO tablename (zahlenwert) VALUE (80); <<<<<<<
> INSERT INTO tablename (zahlenwert) VALUE (21);
> INSERT INTO tablename (zahlenwert) VALUE (19);
>
> Normalerweise haben die Werte eine Toleranz von max. 20-30%.
> Kann man bei einem INSERT eine Abweichung von mehr als 20-30%
> unterbinden, damit es dann (80) nur um einen bestimmten Wert gegenüber
> den letzten 2-3 Einträgen abweichen darf ?

Für einen solchen Fall bietet sich ein vorhergehendes SELECT an, daß dir
den Toleranzbereich zurückgibt. Wenn du das ganze automatisch haben
willst, kannst du eine View mit CHECK OPTION [1] bzw. Stored Procedures
[2] benutzen.

[1] http://dev.mysql.com/doc/refman/5.0/en/create-view.html
[2] http://dev.mysql.com/doc/refman/5.0/en/stored-procedures.htm l


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: Angenäherten Wert eintragen

am 09.01.2006 11:20:03 von Johannes Vogel

Hi usenet

usenet@schani.com wrote:
> ich muss in eine Table Messwerte eintragen und möchte starke
> Werteschwankungen unterbinden.
> INSERT INTO tablename (zahlenwert) VALUE (20);
> INSERT INTO tablename (zahlenwert) VALUE (22);
> INSERT INTO tablename (zahlenwert) VALUE (16);
> INSERT INTO tablename (zahlenwert) VALUE (19);
> INSERT INTO tablename (zahlenwert) VALUE (80); <<<<<<<
> INSERT INTO tablename (zahlenwert) VALUE (21);
> INSERT INTO tablename (zahlenwert) VALUE (19);
> Normalerweise haben die Werte eine Toleranz von max. 20-30%.
> Kann man bei einem INSERT eine Abweichung von mehr als 20-30%
> unterbinden, damit es dann (80) nur um einen bestimmten Wert gegenüber
> den letzten 2-3 Einträgen abweichen darf ?
> Kann man sowas direkt in MySQL machen, oder muss das vorher schon
> erledigt werden.

Besser: Werte wie gemessen in DB eintragen und erst danach
klassifizieren. Bspw. könntest du ein Ausreisser-Flag dazu setzen, falls
der Wert grösser/kleiner 30% vom Mean der Werte abweicht.

alter table tablename add
ausreisser enum('yes','no') not null default 'no';
select @mean:=avg(zahlenwert) from tablename;
update tablename set ausreisser = 'yes'
where .3 > abs(1-zahlenwert/@mean);

Das Problem hier ist jedoch, dass dein avg() stark von den Ausreissern
beeinflusst wird. Deshalb empfehle ich mal den robusteren median zu
benutzen:
Siehe http://dev.mysql.com/doc/refman/4.1/en/group-by-functions.ht ml
User Comments, Posted by [name withheld] on June 20 2002 4:28pm
SELECT x.val from data x, data y
GROUP BY x.val
HAVING SUM(SIGN(1-SIGN(y.val-x.val))) = (COUNT(*)+1)/2;

HTH, Johannes