0

列 {run_id, time_id, co2} を持つ gcrunarrays という名前のテーブルがあります。個別の run_id を持つ数千回の実行があり、それぞれに co2 の 58 の時間依存値があります。特定の時間にすべての実行の CO2 の中央値を取得する手順があります。ここで、毎回の中央値を取得する select ステートメントが必要です。これまでのところ、私は

select DISTINCT A.time_id, M.co2 from gcrunarrays A, call getMedian(1, A.time_id) M
GO

構文エラーが発生します。私は SQL の初心者で、MYSQL で作業しています。私はこの声明をさまざまな言い方で表現しようと試みましたが、今では本質的に間違ったことをしたと感じるところまで来ています。中央値が関数であればもっとうまくいくと思いますが、selectステートメントを使用せずに中央値を取得する方法さえわかりません。どんな提案でも大歓迎です。

より明確にするために:

テーブル gcrunarrays

run_id | time_id | co2
1      | 1       | 
1      | 2       | 
...
1      | 58      | 
2      | 1       | 
...    
2      | 58      | 
3 ...

中央値手順

CREATE PROCEDURE getMedian (IN e INT, t INT)
BEGIN
SELECT count(*), x.co2
FROM (SELECT B.exp_id, A.* FROM gcRunArrays A JOIN gcRuns B ON A.run_id=B.run_id WHERE B.exp_id=e and A.time_id=t) x, 
     (SELECT B.exp_id, A.* FROM gcRunArrays A JOIN gcRuns B ON A.run_id=B.run_id WHERE B.exp_id=e and A.time_id=t) y
GROUP BY x.co2
HAVING SUM(SIGN(1-SIGN(y.co2-x.co2))) = CEILING((COUNT(*)+1)/2);
END
GO
4

1 に答える 1

0

一時テーブルを使用すると、問題を簡単に解決できます。また、プロシージャの結果を直接テーブルとして使用することはできません。

ストアド プロシージャ/関数はテーブルを返すことができますか?

于 2012-08-02T01:54:10.873 に答える