如何在QuestDB中查询上月每日15:30前的最新价格?
实现每日15:30前最新股票价格查询的方案
核心思路
按股票代码(symbol)和日期分组,筛选出每日美国东部时间15:30之前的交易记录,再取每组内时间最晚的那条记录的价格,即为当日15:30前的最新价格。
查询语句
假设你的timestamp字段存储的是UTC时间,先转换为美国东部时间(自动适配夏令时/冬令时),再执行筛选与分组:
SELECT symbol, DATE_TRUNC('day', timestamp AT TIME ZONE 'UTC' AT TIME ZONE 'America/New_York') AS trade_date, LAST(price) AS latest_price_before_1530, LAST(timestamp) AS latest_record_time FROM trades WHERE -- 锁定上月数据范围 timestamp >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month') AND timestamp < DATE_TRUNC('month', CURRENT_DATE) -- 筛选EST时间15:30前的记录 AND (timestamp AT TIME ZONE 'UTC' AT TIME ZONE 'America/New_York')::TIME <= '15:30:00' GROUP BY symbol, trade_date ORDER BY symbol, trade_date;
关键说明
- 时区转换:
timestamp AT TIME ZONE 'UTC' AT TIME ZONE 'America/New_York'会自动处理EDT(夏令时,UTC-4)和EST(冬令时,UTC-5)的切换,无需手动调整时差。 - 上月数据筛选:通过
DATE_TRUNC函数精准定位上月的时间区间,避免跨月数据干扰。 - 取最新价格:
LAST(price)函数会在分组内按时间顺序取最后一条记录的价格,确保是当日15:30前的最新成交价。
特殊情况适配
如果你的timestamp字段本身存储的就是美国东部时间,可直接简化筛选条件:
AND timestamp::TIME <= '15:30:00'
内容的提问来源于stack exchange,提问作者Doncarleone512
相关产品推荐
相关产品推荐

