2012-08-01 40 views
0

我有一個表,名爲gcrunarrays,列{run_id,time_id,co2}。我有幾千個具有不同run_id的運行,每個都有co2的58個時間相關值。我有一個程序來獲得給定時間內所有運行的中位數。現在,我需要一個select語句,每次都會獲得中位數。到目前爲止,我有MySQL - 在選擇語句中包含過程的結果

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 
+0

這是否太複雜?我可以嘗試簡化問題 – 2012-08-01 23:40:38

回答

0

使用臨時表可以很容易地解決這個問題。 而不能直接使用程序結果作爲表格。

Can a stored procedure/function return a table?

+0

非常感謝,我終於明白了這一點,但在中間有很多時間效率低下和自我厭惡 – 2012-08-02 19:42:06