股价在过去一个月内连续 6 个或以上营业日低于一定价值
Posted
技术标签:
【中文标题】股价在过去一个月内连续 6 个或以上营业日低于一定价值【英文标题】:Share price less than certain value for 6 consecutive business days or more in the past month 【发布时间】:2021-12-28 08:24:19 【问题描述】:这是 mysql 8.X 数据库。
我的要求如下: 如果股价在过去一个月内连续 6 个工作日或更长时间低于某个值,我需要通知投资者。
节假日和周末不会有任何股价。所以这些天不会有任何数据。
例如: 在以下数据中,2021 年 12 月 14 日至 12 月 21 日期间,股价连续 6 个工作日低于 100。我需要找到该股票以及股价低于目标值的天数。
effective_date | security | market_price |
---|---|---|
1-Dec-2021 | STOCKNAME | 99 |
2-Dec-2021 | STOCKNAME | 98 |
3-Dec-2021 | STOCKNAME | 97 |
6-Dec-2021 | STOCKNAME | 101 |
7-Dec-2021 | STOCKNAME | 99 |
8-Dec-2021 | STOCKNAME | 98 |
9-Dec-2021 | STOCKNAME | 97 |
10-Dec-2021 | STOCKNAME | 96 |
13-Dec-2021 | STOCKNAME | 102 |
14-Dec-2021 | STOCKNAME | 99 |
15-Dec-2021 | STOCKNAME | 98 |
16-Dec-2021 | STOCKNAME | 97 |
17-Dec-2021 | STOCKNAME | 96 |
20-Dec-2021 | STOCKNAME | 95 |
21-Dec-2021 | STOCKNAME | 99 |
22-Dec-2021 | STOCKNAME | 102 |
23-Dec-2021 | STOCKNAME | 103 |
24-Dec-2021 | STOCKNAME | 114 |
预期输出:
security number_of_days
STOCKNAME 6
【问题讨论】:
你的日期真的是这样存储的吗? 嗨鲑鱼。数据存储如示例中所示。周末和节假日不会有任何股价可用。所以日期会有差距。谢谢你。瓦迪。 '周末没有任何可用的股价' - 那么不能连续 6 个工作日?肯定5是最大值?请根据示例数据发布您的预期结果以帮助澄清。 上个月是几月?如果今天是 12 月 28 日,那么是指整个 11 月还是从今天起过去 30 天? 嗨鲑鱼。我在问题中添加了上面的预期输出。需要的是股票名称和股价低于目标值的天数。连续工作日是指工作日,不包括周末和节假日。所以可以超过5天。谢谢。 【参考方案1】:这是一个间隙和岛屿问题,岛屿是连续的日子。
您需要为每个符合条件的连续行组分配一个唯一值(即值
with g as (
select *,
Row_Number() over (partition by security order by effective_date)
- Row_Number() over (partition by security,
case when market_price<100 then 1 else 0 end order by effective_date
) cnt
from t
)
select security, Count(*) number_of_days
from g
group by security, cnt
order by number_of_days desc
limit 1
Example Fiddle
【讨论】:
嗨,斯图。非常感谢您的回复。让我检查一下。 嗨,斯图。您的解决方案适用于我提供的示例数据。非常感谢你的帮助。非常感激。但是,我现在正试图让它在完整的数据集上工作。我会让你知道结果。我已将您的答案标记为正确。再次感谢您的帮助。以上是关于股价在过去一个月内连续 6 个或以上营业日低于一定价值的主要内容,如果未能解决你的问题,请参考以下文章
如何获取过去 6 个月内为 sonarqube 创建的项目的报告?
有啥好的新的网络开发者浏览器插件吗? (如在过去 6 个月内发布)
在 SQL Server 中查找给定 12 个月内 6 个月的最高连续期间