如何在Oracle SQL中将1分钟粒度股票数据转换为指定时间间隔数据
按指定时间间隔提取股票整分时刻Open值的实现方案
完全可以实现。由于你的表中已存在每分钟的唯一记录,且目标间隔的整分时刻(如5分钟间隔的14:30、14:35等)均包含在原数据中,只需通过筛选date列的分钟数匹配规则,直接提取对应记录的open值即可,无需使用聚合函数。
以下是主流数据库的具体实现代码:
MySQL
5分钟间隔
SELECT date, open FROM stock_data WHERE MINUTE(date) % 5 = 0;
15分钟间隔
SELECT date, open FROM stock_data WHERE MINUTE(date) % 15 = 0;
30分钟间隔
SELECT date, open FROM stock_data WHERE MINUTE(date) % 30 = 0;
1小时间隔
如果需匹配交易时段的小时起始(如09:15、10:15):
SELECT date, open FROM stock_data WHERE MINUTE(date) = 15;
如果需匹配自然小时整分(如10:00、11:00):
SELECT date, open FROM stock_data WHERE MINUTE(date) = 0;
PostgreSQL
5分钟间隔
SELECT date, open FROM stock_data WHERE EXTRACT(MINUTE FROM date) % 5 = 0;
15分钟间隔
SELECT date, open FROM stock_data WHERE EXTRACT(MINUTE FROM date) % 15 = 0;
30分钟间隔
SELECT date, open FROM stock_data WHERE EXTRACT(MINUTE FROM date) % 30 = 0;
1小时间隔
匹配交易时段小时起始:
SELECT date, open FROM stock_data WHERE EXTRACT(MINUTE FROM date) = 15;
匹配自然小时整分:
SELECT date, open FROM stock_data WHERE EXTRACT(MINUTE FROM date) = 0;
SQL Server
5分钟间隔
SELECT date, open FROM stock_data WHERE DATEPART(MINUTE, date) % 5 = 0;
15分钟间隔
SELECT date, open FROM stock_data WHERE DATEPART(MINUTE, date) % 15 = 0;
30分钟间隔
SELECT date, open FROM stock_data WHERE DATEPART(MINUTE, date) % 30 = 0;
1小时间隔
匹配交易时段小时起始:
SELECT date, open FROM stock_data WHERE DATEPART(MINUTE, date) = 15;
匹配自然小时整分:
SELECT date, open FROM stock_data WHERE DATEPART(MINUTE, date) = 0;
说明:若需限定日期范围,可在WHERE子句中添加date BETWEEN '起始日期 09:15:00' AND '结束日期 15:30:00'条件。
内容的提问来源于stack exchange,提问作者Logan
相关产品推荐
相关产品推荐

