2013-07-18 96 views
0

我有一個存儲股市數據的數據庫。期間獲取平均數

有3列一個表:stockId日期

新的數據將被插入到表中每個交易日。

我如何得到'過去10個交易日內每隻股票的平均交易量'等結果?

+2

通過編寫查詢:) – Krishna

+0

或抓取結果之間的時間段,並使用任何編程語言,你正在使用總和除以數量。 – celwell

+0

我想知道可以用單個查詢來完成嗎? –

回答

1
SELECT SUM(volume)/10 FROM table_name 
Where date Between Cast('7/18/13 12:01:01' As DateTime) And Cast('7/08/13 12:01:01' as DateTime) 
+0

對不起......我的意思是股票的平均交易量, 的股票,而不是整個股票市場的平均交易量。 –

+0

你有一個錯誤的語法,請刪除第一行 –

+0

末尾的分號,分號很明顯。大聲笑 –

1
SELECT AVG(volume) FROM mytable WHERE date >= (CURDATE() - INTERVAL 10 DAY) 

編輯:

最近10天劑量組,他們的平均水平。

SELECT AVG(volume) FROM mytable GROUP BY date ORDER BY date DESC LIMIT 10 
+0

將返回過去10天,而不是最後10個交易日。我是否必須創建一張表來記錄交易日? –

+0

可能「按日期分組」可以幫忙嗎? –

+0

我已編輯答案。如果你想獲得stockId值,我認爲可以使用GROUP_CONCAT。 –

1

http://sqlfiddle.com/#!6/c8dbb/4

CREATE TABLE Stocks 
    ([StockId] int, [Date] DateTime, [Volume] int) 
; 

INSERT INTO Stocks 
    ([StockId], [Date], [Volume]) 
VALUES 
    (1, GetDate(), 1000), 
    (1, GetDate()+1, 2000), 
    (1, GetDate()+2, 4000), 
    (2, GetDate(), 1000), 
    (2, GetDate()+1, 1000), 
    (2, GetDate()+2, 500) 
; 

Select StockId, AVG(Volume) [AverageVolume] 
FROM Stocks 
WHERE [Date] >= DATEADD(dd, 0, DATEDIFF(dd, 0, GetDate())) - 10 
Group by StockId 
Order by StockId 
+1

哇。 sqlfiddle.com真的很酷。 –

+0

GetDate()可能需要根據您的要求進行更改,以僅返回日期部分和午夜時間部分。我將在一分鐘內更改代碼以反映這一點。 – Dodecapus

+0

它正在返回日子,而不是交易日。 –

0

有趣的小查詢寫。那就是:

SELECT AVG(x.Volume) FROM (SELECT Volume FROM StockTable WHERE Date BETWEEN 
DATE_ADD(NOW(), INTERVAL -10 DAY) AND NOW())x 

這是我用來建立一個樣品表SQLFiddle關閉的工作:

CREATE TABLE StockTable (ID INT PRIMARY KEY AUTO_INCREMENT NOT NULL, Date DATETIME, Volume INT); 
INSERT INTO StockTable (Date, Volume) VALUES (DATE_ADD(NOW(), INTERVAL 12 DAY), 1000), (DATE_ADD(NOW(), INTERVAL 1 DAY), 5000), 
(DATE_ADD(NOW(), INTERVAL 0 DAY), 3000), (DATE_ADD(NOW(), INTERVAL -11 DAY), 6000), (DATE_ADD(NOW(), INTERVAL -5 DAY), 4000), (DATE_ADD(NOW(), INTERVAL 7 DAY), 9000); 

這裏是行動的查詢SQLFiddle的鏈接。查詢背後

理念:我創建一個派生表x其中只包含內近10天的卷。然後我計算該表格中包含的卷的平均值。瞧!

編輯:

我特別意識到你是通過其他的答案和評論看完後找什麼。您正在尋找在過去10天內股票市場中每隻股票的平均

我建的樣品臺客這樣的:

CREATE TABLE StockTable (StockId INT NOT NULL, Date DATETIME, Volume INT); 
INSERT INTO StockTable (StockId, Date, Volume) VALUES (1, DATE_ADD(NOW(), INTERVAL 6 
DAY), 1000), (2, DATE_ADD(NOW(), INTERVAL 1 DAY), 5000), 
(2, DATE_ADD(NOW(), INTERVAL 0 DAY), 3000), (3, DATE_ADD(NOW(), INTERVAL -8 DAY), 
6000), (1, DATE_ADD(NOW(), INTERVAL -5 DAY), 4000), 
(2, DATE_ADD(NOW(), INTERVAL 7 DAY), 9000); 

和查詢,讓您的結果是:

SELECT StockId, AVG(Volume) FROM StockTable WHERE Date BETWEEN DATE_ADD(NOW(), 
INTERVAL -10 DAY) AND NOW() GROUP BY StockId 

Here是在行動查詢SQLFiddle的鏈接。

1

我基於這個Dodecapus的答案,並基於您給其他答案的評論。我只是在回答中包含查詢,但請查看sqlfiddle以獲取有關數據的工作示例。

http://sqlfiddle.com/#!6/91599/2

SELECT 
    StockId 
    ,AVG(Volume) [AverageVolume] 
FROM Stocks 
WHERE [Date] IN 
(
    SELECT DISTINCT TOP 10 [Date] FROM Stocks ORDER BY [Date] DESC 
) 
GROUP BY StockId 
ORDER BY StockId 

此,如果有至少一個股票,每交易日成交量紀錄只會工作。

+0

優秀的解釋,你看起來很帥! –

+0

謝謝!如果我的答案和英俊的外表是解決您的問題,請隨時通過接受它來表示您的讚賞:) –