![]() |
Datenbank: MySQL • Version: 5.1 • Zugriff über: -
Variable in Select-Statement geht nicht (Stored Function)
Ich möchte den Mittelwert nur über einige Werte bilden, daher: "limit @Cnt"
SQL-Code:
MySQL sagt dazu nur:
create function M1_Mittelwert (Cnt int) returns Double
begin declare Result Double; select Avg(Abzugskraft) into Result from Messung1 order by Zeit desc limit @Cnt; return Result; end $$
Code:
Können für im Limit-Teil keine Variablen verwendet werden? Wie kann ich den Mittelwert nur über einige Werte bilden?
Script line: 4 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@Cnt;
return Result; end' at line 4 |
Re: Variable in Select-Statement geht nicht (Stored Function
Zitat:
Zitat:
-Statement zur laufzeit zusammensetzen ( fall MySQL dies unterstützt) |
Re: Variable in Select-Statement geht nicht (Stored Function
Vielleicht so...
SQL-Code:
CREATE FUNCTION `func_Mittelwert`(cnt INT) RETURNS DOUBLE
BEGIN DECLARE result DOUBLE; SELECT AVG(abzugskraft) INTO result FROM Messung1 x WHERE cnt > (SELECT COUNT(*) FROM Messung1 WHERE zeit < x.zeit); RETURN result; END |
Re: Variable in Select-Statement geht nicht (Stored Function
Variablen im Limit sollten denke ich klappen.
Wenn ich mich aber recht erinnere hat Limit doch 2 Parameter. Limit (<RecordCount>, <Offset des ersten zu suchenden Datensatzes>) [Edit] Falls Variablen wirklich nicht unterstützt werden könntest du alternativ eine Lösung über Dynamic SQL suchen. ungetestst, etwa so ...
SQL-Code:
CREATE FUNCTION `func_Mittelwert`(cnt INT) RETURNS DOUBLE
BEGIN DECLARE result DOUBLE; DECLARE SQLCMD VARCHAR(500) SET SQLCMD = 'select Avg(Abzugskraft) into @Result from Messung1 order by Zeit desc limit ' + CAST (@Cnt as VARCHAR(4)) + ';' ; EXEC SQLCMD; RETURN result; END |
Re: Variable in Select-Statement geht nicht (Stored Function
Den Schleifen-Ansatz habe ich verstanden, und konnte ich auch umsetzen.
Den Ansatz von Omata habe ich zwar nicht ganz verstanden, aber er funktioniert. (Ich musste für meinen Zweck nur den Vergleich drehen: Zeit > x.Zeit.) was ich nicht verstehe: Woher weiß die äußere Abfrage, über welche Werte der Mittelwert gebildet werden soll? Irgendwie steht doch da nicht mehr als bspw. "select ... from ... where 10 > 9" mit Cnt = 10... Auf dynamisches SQL bin ich dann auch gekommen. Allerdings: "Dynamic SQL not allowed in Stored Function or Trigger." Mich würde trotzdem interessieren, wie man an das Abfrageergebnis herankommt, wenn man dynamisches SQL ausführt? |
Re: Variable in Select-Statement geht nicht (Stored Function
Dynamisches SQL heisst ja nur, dass man die Abfrage zur Laufzeit zusammenbaut ( als String) und diese dann ausführen lässt.
|
Re: Variable in Select-Statement geht nicht (Stored Function
Angucken und gut? Kein weiteres Verarbeiten? Wozu braucht man dann dynamisches SQL?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz