0

我有一个存储股票市场数据的数据库。

有一个包含 3 列的表:stockIddatevolume

每个交易日都会将新数据插入到表格中。

如何获得“过去 10 个交易日内每只股票的平均交易量”之类的结果?

4

5 回答 5

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)
于 2013-07-18T21:11:13.630 回答
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 
于 2013-07-18T21:19:05.413 回答
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

这只有在每个交易日至少有一只股票有成交量的记录时才有效。

于 2013-07-19T18:39:19.717 回答
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
于 2013-07-18T21:22:10.700 回答
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

是一个链接到正在运行的查询的 SQLFiddle。

于 2013-07-19T04:19:09.907 回答