如何从表中获得5分钟的间隔日期 [英] how to get 5min interval date from table

查看:101
本文介绍了如何从表中获得5分钟的间隔日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆