You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:将minute bars合并为15 minute bars视图的实现方案

15分钟K线视图创建方案

核心思路是将分钟K线按15分钟区间分组,通过聚合函数计算对应K线的开、高、低、收及成交量总和。以下是主流数据库的实现代码:

MySQL 实现

CREATE VIEW fifteen_minute_bars AS
SELECT
    -- 生成15分钟区间起始时间(格式:YYYY-MM-DD HH:MM:00)
    DATE_FORMAT(datetime, '%Y-%m-%d %H:%02d:00') AS bar_datetime,
    -- 取区间内最早时间的开盘价
    SUBSTRING_INDEX(GROUP_CONCAT(open ORDER BY datetime), ',', 1) AS open,
    -- 区间最高价
    MAX(high) AS high,
    -- 区间最低价
    MIN(low) AS low,
    -- 取区间内最晚时间的收盘价
    SUBSTRING_INDEX(GROUP_CONCAT(close ORDER BY datetime), ',', -1) AS close,
    -- 区间成交量总和
    SUM(volume) AS volume
FROM minute_bars
-- 按15分钟区间分组
GROUP BY DATE_FORMAT(datetime, '%Y-%m-%d %H:%02d:00')
ORDER BY bar_datetime;

PostgreSQL 实现

CREATE VIEW fifteen_minute_bars AS
SELECT
    -- 生成15分钟区间起始时间
    date_trunc('hour', datetime) + INTERVAL '15 minutes' * FLOOR(date_part('minute', datetime)/15) AS bar_datetime,
    -- 区间首个开盘价
    FIRST_VALUE(open) OVER (PARTITION BY interval_start ORDER BY datetime) AS open,
    MAX(high) AS high,
    MIN(low) AS low,
    -- 区间最后收盘价
    LAST_VALUE(close) OVER (PARTITION BY interval_start ORDER BY datetime RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS close,
    SUM(volume) AS volume
FROM (
    SELECT
        *,
        date_trunc('hour', datetime) + INTERVAL '15 minutes' * FLOOR(date_part('minute', datetime)/15) AS interval_start
    FROM minute_bars
) t
GROUP BY interval_start
ORDER BY interval_start;

SQL Server 实现

CREATE VIEW fifteen_minute_bars AS
SELECT
    -- 生成15分钟区间起始时间
    DATEADD(MINUTE, DATEDIFF(MINUTE, 0, datetime)/15*15, 0) AS bar_datetime,
    -- 区间首个开盘价
    FIRST_VALUE(open) OVER (PARTITION BY interval_start ORDER BY datetime) AS open,
    MAX(high) AS high,
    MIN(low) AS low,
    -- 区间最后收盘价
    LAST_VALUE(close) OVER (PARTITION BY interval_start ORDER BY datetime ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS close,
    SUM(volume) AS volume
FROM (
    SELECT
        *,
        DATEADD(MINUTE, DATEDIFF(MINUTE, 0, datetime)/15*15, 0) AS interval_start
    FROM minute_bars
) t
GROUP BY interval_start
ORDER BY interval_start;

注意事项

  • 确保datetime字段为标准时间类型(如DATETIME、TIMESTAMP),保证排序准确性
  • 跨天的K线区间会自动被正确分组,无需额外处理
  • 若存在分钟K线缺失的情况,聚合逻辑会自动忽略缺失时段,仅统计已有数据

内容的提问来源于stack exchange,提问作者DP.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 05:50:23