如何从表中获得5分钟的间隔日期 [英] how to get 5min interval date from table
问题描述
我有一个comapy的股票数据延迟几分钟
id更新时间价格
5 2015-07-17 09:02:00.000 65.5
5 2015-07-17 09:03:00.000 65.5
5 2015-07-17 09:05:00.000 65.5
5 2015-07 -17 09:06:00.000 66
5 2015-07-17 09:07:00.000 66
5 2015-07-17 09:08:00.000 66
5 2015-07-17 09:16:00.000 66.5
5 2015-07-17 09:17:00.000 66.3
5 2015-07 -17 09:18:00.000 66.25
5 2015-07-17 09:19:00.000 66.3
i需要5分钟的间隔日期,如果接下来5分钟的日期不存在查询应该是最新日期
(即9.02,9.07,9.12< - 不存在所以它sholud选择9.16,然后9.21等......)
5是公司ID然后updTime在最后价格
plz帮我逻辑
提前感谢
i have a stock data of comapy which is delayed of few mins
id update time price
5 2015-07-17 09:02:00.000 65.5
5 2015-07-17 09:03:00.000 65.5
5 2015-07-17 09:05:00.000 65.5
5 2015-07-17 09:06:00.000 66
5 2015-07-17 09:07:00.000 66
5 2015-07-17 09:08:00.000 66
5 2015-07-17 09:16:00.000 66.5
5 2015-07-17 09:17:00.000 66.3
5 2015-07-17 09:18:00.000 66.25
5 2015-07-17 09:19:00.000 66.3
i want 5min interval date and if next 5min date is not there query should latest date
(i.e 9.02,9.07,9.12<--not there so it sholud select 9.16,then 9.21 so on... )
5 is company id then updTime at last price
plz help me with logic
thanks in advance
推荐答案
解决方案取决于您实际想要如何处理缺失值,这是前提s或每5分钟取下一个值等等。
但是某种想法可能是首先生成日期时间值然后尝试获取下一个库存值及时。所以像
The solution depends how you actually want to handle missing values, is the previous or the next value taken from each 5 minutes and so on.
But some kind of idea could be to generate datetime values first and then try fetching the next stock value in time. So something like
create table stockdata (
id int ,
updatetime datetime,
price float
);
insert into stockdata values ( 5, '2015-07-17T09:02:00.000', 65.5);
insert into stockdata values ( 5, '2015-07-17T09:03:00.000', 65.5);
insert into stockdata values ( 5, '2015-07-17T09:05:00.000', 65.5);
insert into stockdata values ( 5, '2015-07-17T09:06:00.000', 66);
insert into stockdata values ( 5, '2015-07-17T09:07:00.000', 66);
insert into stockdata values ( 5, '2015-07-17T09:08:00.000', 66);
insert into stockdata values ( 5, '2015-07-17T09:16:00.000', 66.5);
insert into stockdata values ( 5, '2015-07-17T09:17:00.000', 66.3);
insert into stockdata values ( 5, '2015-07-17T09:18:00.000', 66.25);
insert into stockdata values ( 5, '2015-07-17T09:19:00.000', 66.3);
declare @startdate datetime = convert(datetime, '2015-07-17T09:00:00.000', 126)
declare @enddate datetime = convert(datetime, '2015-07-17T10:00:00.000', 126)
;with minutes5 as (
select @startdate DateAndTime
union all
select dateadd(minute, 5, minutes5.DateAndTime) DateAndTime
from minutes5
where DateAndTime <= @enddate
)
select *
from minutes5 m, stockdata sd
where sd.updatetime >= m.DateAndTime
and sd.updatetime = (select min(sd2.updatetime)
from stockdata sd2
where sd2.updatetime >= m.DateAndTime
and sd2.updatetime < dateadd(minute, 5, m.DateAndTime))
这篇关于如何从表中获得5分钟的间隔日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!