[英]Select less and less records over time?
我想编写一个查询或存储过程,以便随着时间的推移从关系数据库中检索越来越少的记录。
您可以将其想象为填充Google财经股票图表:过去几天的所有价格变动都适合当日,而您回头走得越远,每个日期显示的价格变动就越少。 今天所有的价格变动都将显示,一个星期前的价格变动将显示50%,一个月前的价格变动将显示30%,一年前的价格变动将显示10%。 可以将其视为渐变。
是否可以通过一个查询来实现? 也许有必要使用多个查询? 这看起来像什么?
请注意,记录id是不连续的(有间隔),但是每个记录都有确定顺序的时间戳。
另请注意,我正在使用MySQL。
这是我的表的结构:
quotes
id
security_id
last_price
bid_price
ask_price
date
timestamp
trade_volume
cumulative_volume
average_volume
created_at
听起来您正在寻找代表时间跨度的一组恒定记录。 您可以通过定义控制日期集来实现。
这是一个示例查询(不考虑周末和节假日,但可以添加):
填充:
CREATE TABLE #quotes
(
id int identity(1,1)
,security_id VARCHAR(50)
,last_price FLOAT
,bid_price FLOAT
,ask_price FLOAT
,[date] DATETIME
,[timestamp] DATETIME
,trade_volume FLOAT
,cumulative_volume FLOAT
,average_volume FLOAT
,created_at DATETIME
)
DECLARE @i int
set @i = 100000
WHILE @i > 0
BEGIN
INSERT INTO #quotes (
security_id
,last_price
,bid_price
,ask_price
,[date]
,[timestamp]
,trade_volume
,cumulative_volume
,average_volume
,created_at
)
values( 'IBM US'
, 100.00 + RAND()
, 100.00 + RAND()
, 100.00 + RAND()
, DATEADD(MINUTE, -1* @i, GETDATE())
, DATEADD(MINUTE, -1* @i, GETDATE())
, 10000000.00 + RAND()*1000000.00
, 10000000.00 + RAND()*1000000.00
, 10000000.00 + RAND()*1000000.00
,getdate())
set @i= @i-1
END
您可以在时间范围内进行更改,但是以下内容将为您提供约1000条记录,从头到尾代表该集合。
DECLARE @StartDate DATETIME,
@EndDate DATETIME,
@j FLOAT,
@step FLOAT
set @StartDate = GETDATE()-20
SET @EndDAte = GETDATE()
set @j = 0.0
CREATE TABLE #TimeTable
(
IntervalDate DATETIME
)
--say you always want 1000 measures
--use the datediff value to define the step size:
select @step = DATEDIFF(MINUTE, @StartDate, @EndDate)/1000.0
WHILE @j < DATEDIFF(MINUTE, @StartDate, @EndDate)
BEGIN
INSERT #TimeTable (IntervalDate) VALUES (DATEADD(minute, @j, @StartDate))
SET @j = @j+@step
print @j
END
select security_id
,last_price
,bid_price
,ask_price
,[date]
,[timestamp]
,trade_volume
,cumulative_volume
,average_volume
,created_at
from #Quotes q
join #TimeTable t on dateadd(mi, datediff(mi, 0, q.date), 0) = dateadd(mi, datediff(mi, 0, t.IntervalDate), 0)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.