Sql 股票数据时间范围变更查询
我正在搜索一个简单的查询,可以将较低时间段的股票数据更改为较高时间段的股票数据。考虑下面的表格Sql 股票数据时间范围变更查询,sql,ms-access,Sql,Ms Access,我正在搜索一个简单的查询,可以将较低时间段的股票数据更改为较高时间段的股票数据。考虑下面的表格 Open High Low Close Volume Date 1999-01-04 10:22:00 1.1801 1.1819 1.1801 1.1817 4 1999-0
Open High Low Close Volume
Date
1999-01-04 10:22:00 1.1801 1.1819 1.1801 1.1817 4
1999-01-04 10:23:00 1.1817 1.1818 1.1804 1.1814 18
1999-01-04 10:24:00 1.1817 1.1817 1.1802 1.1806 12
1999-01-04 10:25:00 1.1807 1.1815 1.1795 1.1808 26
1999-01-04 10:26:00 1.1803 1.1806 1.1790 1.1806 4
1999-01-04 10:27:00 1.1801 1.1801 1.1779 1.1786 23
1999-01-04 10:28:00 1.1795 1.1801 1.1776 1.1788 28
1999-01-04 10:29:00 1.1793 1.1795 1.1782 1.1789 10
1999-01-04 10:31:00 1.1780 1.1792 1.1776 1.1792 12
1999-01-04 10:32:00 1.1788 1.1792 1.1788 1.1791 4
它每1分钟更新一次。如何通过查询将其更改为2分钟的数据?您想对内容进行分组:
select floor(time/2) as time,
sum(volume) as volume,
max(case when time = 2*floor(time/2) then open end) as open,
max(high) as high,
max(low) as low),
max(case when time = 2*floor(time/2)+1 then close end) as close
from t
group by floor(time/2)
使用
行号()
,可以使打开和关闭的公式更简单、更通用,但您需要指定数据库。答案在SQL Server
中。因此,您可能需要更改一些语法以适应。就……而言
另外,假设你的股票流动性极强,不会错过一分钟的滴答声……;)不过,这个查询还可以进一步改进。请试一试
select z.dt, a.opens as o, z.h,
z.l, b.closes as c, z.v
from (
select Dateadd(minute, 1, x.dates) as dt,
max(y.high) as h, min(y.low) as l,
sum(y.volume) as v
from ohlcv x
left join ohlcv y
on y.dates
between x.dates and
Dateadd(minute, 1, x.dates)
where (DATEPART(MINUTE, x.Dates) % 2) = 0
group by Dateadd(minute, 1, x.dates)) z
left join
ohlcv a
on a.dates = Dateadd(minute, -1, z.dt)
left join ohlcv b
on b.dates = z.dt
where not (a.opens is null or z.h is null
or z.l is null or b.closes is null
or z.v is null)
;
结果:
| DT |O |H |L |C | V |
---------------------------------------------------------------------------
| January, 04 1999 10:23:00+0000 | 1.1801 | 1.1819 | 1.1801 | 1.1814 | 22 |
| January, 04 1999 10:25:00+0000 | 1.1817 | 1.1817 | 1.1795 | 1.1808 | 38 |
| January, 04 1999 10:27:00+0000 | 1.1803 | 1.1806 | 1.1779 | 1.1786 | 27 |
| January, 04 1999 10:29:00+0000 | 1.1795 | 1.1801 | 1.1776 | 1.1789 | 38 |
| January, 04 1999 10:31:00+0000 | 1.1781 | 1.1793 | 1.1776 | 1.1792 | 17 |
非常感谢您的快速回复。非常感谢Access@GordonLinoff . 或者OP写他自己的,但是这个链接也已经提供了。
更新频率等于2分钟,你的OHLCV是什么?例如,对于10.22到10.23,您是否希望Open为1.1801,close为1.1814?高到1.1819,低到1.1801?那么音量是22?汉斯·阿普:这只是一个例子。我想它有一行是10:30:00。对BoCADIGIO:是的,对BoCADIGIO:是的。确切地说,认为它和你说的其他时间框架一样,比如3分钟。在3分钟的情况下,将变为时间:10:24打开:1.1801高:1.1819低:1.1801关闭:1.1806音量:34@user1956274有时,由于缺乏流动性的股票或时间框架,每分钟可能没有一个刻度。因此,您能否确定是否每分钟都有日期?非常感谢您的帮助。在其他时间段(如5分钟)它是如何工作的敏。此外,我对您在查询中使用的字母感到有点困惑。我是指z、a和b。它们是什么?@user1956274我以为您忘了这一点……)althousea、b、x、z.
。因此,在2分钟内,您将1分钟
添加到5分钟内,您将4分钟
添加到我使用的DateAdd
@user1956274的函数中。请尝试此操作。不过,我很想知道这是否对您有所帮助,以及这是否是您想要的:)请发表评论。非常感谢。这非常有帮助,它帮助我学习了sql中的一个新概念,我是指表别名。上帝保佑您:)@user1956274然后投票赞成;)如果这个答案对你有帮助:D因为你是新来的,你可能不知道怎么做,请检查和+1以获得你感兴趣的问题。