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

如何查找连续2天股价上涨的股票及起始日期,并扩展至N天

找出连续N天收盘价上涨的股票及起始日期

一、连续2天上涨的实现(基于LAG窗口函数)

要找出连续2天收盘价上涨的股票及其起始日期,我们可以利用LAG()窗口函数获取每只股票前一天的收盘价,再判断当日收盘价是否高于前一日,满足条件的记录中,前一日即为连续上涨的起始日期。

SQL示例代码:

WITH daily_price_compare AS (
    SELECT
        Stock_Ticker,
        Date_id,
        Close_Price,
        LAG(Close_Price) OVER (PARTITION BY Stock_Ticker ORDER BY Date_id) AS prev_day_close
    FROM stock_prices
)
SELECT
    Stock_Ticker,
    LAG(Date_id) OVER (PARTITION BY Stock_Ticker ORDER BY Date_id) AS start_date,
    CONCAT(LAG(Date_id) OVER (PARTITION BY Stock_Ticker ORDER BY Date_id), ' ~ ', Date_id) AS consecutive_period
FROM daily_price_compare
WHERE Close_Price > prev_day_close
ORDER BY Stock_Ticker, start_date;

执行这个查询后,会得到每只股票所有连续2天上涨的起始日期和对应时间段。

二、扩展到连续N天上涨的通用解法

如果需要查找连续N天(比如N=3、N=5)上涨的情况,多次嵌套LAG()会导致代码冗余且不易维护,推荐使用分组标记法结合窗口函数实现:

核心思路

  1. 为每只股票的每日价格标记是否上涨(当日收盘价>前一日则标记为1,否则为0)
  2. 通过累加“未上涨”的标记值,将连续上涨的日期划分为同一个分组
  3. 统计每个分组的天数,筛选出天数≥N的分组,取分组的最小日期作为起始日期

SQL示例代码(以N=3为例):

WITH price_trend_flag AS (
    SELECT
        Stock_Ticker,
        Date_id,
        CASE WHEN Close_Price > LAG(Close_Price) OVER (PARTITION BY Stock_Ticker ORDER BY Date_id)
             THEN 1 ELSE 0 END AS is_up
    FROM stock_prices
),
trend_groups AS (
    SELECT
        Stock_Ticker,
        Date_id,
        SUM(CASE WHEN is_up = 0 THEN 1 ELSE 0 END) OVER (PARTITION BY Stock_Ticker ORDER BY Date_id) AS group_id
    FROM price_trend_flag
),
group_summary AS (
    SELECT
        Stock_Ticker,
        group_id,
        MIN(Date_id) AS start_date,
        MAX(Date_id) AS end_date,
        COUNT(*) AS consecutive_days
    FROM trend_groups
    GROUP BY Stock_Ticker, group_id
    HAVING COUNT(*) >= 3 -- 这里替换为你需要的N值
)
SELECT
    Stock_Ticker,
    start_date,
    end_date,
    consecutive_days
FROM group_summary
ORDER BY Stock_Ticker, start_date;

说明

  • 第一部分CTEprice_trend_flag完成每日上涨标记,首日因无前一日数据,is_up为0
  • trend_groups通过累加未上涨标记,将连续上涨的日期归为同一分组,分组ID仅在价格下跌时递增
  • group_summary统计每个分组的连续天数,筛选出符合N天要求的结果,最终输出股票、起始日期、结束日期及连续天数

需要调整连续天数时,只需修改HAVING COUNT(*) >= 3中的数值即可,适配任意N值的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:36:23