MySQL表按日期排序统计Higher High更高收盘价的实现方法咨询
MySQL实现Higher High(更高高点)判断方案
适用MySQL 8.0及以上版本(窗口函数方案,性能更优)
使用MAX()窗口函数获取当前行之前所有收盘价的最大值,直接比对即可:
SELECT SYMBOL, CLOSE, DayNo, YearNo, Rank_No, CASE WHEN CLOSE > MAX(CLOSE) OVER ( -- 按股票代码、年份分区,若需统计上市以来所有高点可去掉YearNo分区 PARTITION BY SYMBOL, YearNo ORDER BY DayNo -- 取当前行之前的所有行范围 ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING ) THEN 'YES' ELSE 'NO' END AS `Count` FROM 替换为你的实际表名 ORDER BY SYMBOL, YearNo, DayNo;
适用MySQL 5.x版本(子查询兼容方案)
没有窗口函数的低版本MySQL可以用关联子查询实现逻辑:
SELECT t1.SYMBOL, t1.CLOSE, t1.DayNo, t1.YearNo, t1.Rank_No, CASE WHEN t1.CLOSE > ( SELECT MAX(t2.CLOSE) FROM 替换为你的实际表名 t2 WHERE t2.SYMBOL = t1.SYMBOL -- 若需统计上市以来所有高点可去掉下一行的YearNo条件 AND t2.YearNo = t1.YearNo AND t2.DayNo < t1.DayNo ) THEN 'YES' ELSE 'NO' END AS `Count` FROM 替换为你的实际表名 t1 ORDER BY t1.SYMBOL, t1.YearNo, t1.DayNo;
说明
以上两种方案均可完全匹配你给出的预期输出结果,第一行由于没有之前的收盘价数据默认返回NO,符合要求。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

