【问题标题】:Querying PostgreSQL for Open-High-Low-Close (OHLC)查询 PostgreSQL 的 Open-High-Low-Close (OHLC)
【发布时间】:2021-06-05 03:54:19
【问题描述】:

数据表中存储的结构是:

id code price created_at
1 USDTBTC 6.404203 1622781005
2 USDTBTC 6.404199 1622781065
3 USDTBTC 6.404202 1622781125

希望每1分钟、5分钟得到OHLC的数据,

select g,
       COALESCE(MAX(p.price), 0) AS high,
       COALESCE(MIN(p.price), 0) AS low
FROM generate_series(
                 date_trunc('minute', now() - '1 day'::interval),
                 date_trunc('minute', now()),
                 '5 minute'::interval
         ) as g
         LEFT JOIN product_trend p
                   ON p.code = 'USDCNY' AND to_char(concat(to_char(TO_TIMESTAMP(created_at), 'YYYY-MM-DD HH24:MI'), ':',
                                                           FLOOR(date_part('minute', TO_TIMESTAMP(created_at)) / 5) * 5):: timestamp,
                                                    'YYYY-MM-DD HH24:MI') =
                                            to_char(g, 'YYYY-MM-DD HH24:MI')
group by g
order by g;

我尝试使用generate_series,因为我担心会出现数据空白;但数据无法查询,请问如何查询?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    我实际上不确定您的真正问题是什么,但我可以看到:

    1. 您过滤的代码与数据中的代码不匹配。
    2. 日期比较非常复杂。我不知道它们是否正确。
    3. 您依赖于 now(),它每秒都在变化。

    在从表中返回数据的意义上,以下内容确实“起作用”:

    select g,
           COALESCE(MAX(p.price), 0) AS high,
           COALESCE(MIN(p.price), 0) AS low
    FROM generate_series(date_trunc('minute', '2021-06-05'::date - interval '1 day'),
                         date_trunc('minute', '2021-06-05'::date),
                         interval '5 minute'
                         )  g LEFT JOIN
         product_trend p
         ON p.code = 'USDTBTC' AND
            p.created_at >= extract(epoch from g) and
            p.created_at < extract(epoch from (g + interval '5 minute'))
    group by g
    order by g;
    

    Here 是一个 dbfiddle。

    【讨论】:

      猜你喜欢
      • 2011-02-02
      • 2010-12-02
      • 1970-01-01
      • 2020-01-23
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多