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

如何跨日期查询不同列数据?实现daily_price表特定行情筛选

解决daily_price表的条件查询问题

需求是从daily_price表中筛选出2022-08-31当日满足以下两个条件的记录:

  • 当日close > 当日open
  • 当日close > 同一股票(symbol)昨日的high

原查询的问题

你写的查询逻辑错误在于两个子查询没有按symbol关联,会把2022-08-31所有股票的close和2022-08-30所有股票的high做无差别比较,无法对应到同一股票的昨日数据,导致结果不符合预期。

正确解法

方法1:自连接(通用SQL写法)

通过自连接将当日数据与同一股票的昨日数据关联,精准匹配每个股票的昨日high:

SELECT t1.*
FROM daily_price t1
JOIN daily_price t2 
  ON t1.symbol = t2.symbol 
  AND t2.date = DATE_SUB(t1.date, INTERVAL 1 DAY) -- 不同数据库日期函数有差异,比如PostgreSQL用 t1.date - INTERVAL '1 day'
WHERE t1.date = '2022-08-31'
  AND t1.close > t1.open
  AND t1.close > t2.high;

方法2:窗口函数(适用于支持LAG的数据库,如MySQL8+、PostgreSQL等)

用LAG()窗口函数直接获取同一股票的昨日high值,写法更简洁:

SELECT symbol, date, open, high, low, close
FROM (
  SELECT *,
         -- 按股票分组、日期排序,取上一条记录的high(即昨日high)
         LAG(high) OVER (PARTITION BY symbol ORDER BY date) AS prev_day_high
  FROM daily_price
) AS sub
WHERE date = '2022-08-31'
  AND close > open
  AND close > prev_day_high;

验证结果

用你提供的示例数据测试,两种方法都会返回ACR的2022-08-31记录,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:03:25