SQL 求股市连续跌的天数

题目
表a包含日期和股市涨跌标记(1:跌,0:涨),请用任意SQL得到连续跌的天数,得到例如表b的效果。
 
表a

adate(日期) tag(股市涨跌标记(1:跌,0:涨)
2023-1-16 1
2023-1-15 1
2023-1-14 1
2023-1-13 1
2023-1-12 0
2023-1-11 0
2023-1-10 0
2023-1-9 1
2023-1-8 0

表b

adate(日期) tag(股市涨跌标记(1:跌,0:涨) conti(连续跌的天数)
2023-1-16 1 4
2023-1-15 1 3
2023-1-14 1 2
2023-1-13 1 1
2023-1-12 0 0
2023-1-11 0 0
2023-1-10 0 0
2023-1-9 1 1
2023-1-8 0 0

求连续天数类型的题,我们核心的思路就是找出能够将每组连续值分开的标记,下面介绍该题的两种解法。

方法一
第一种方法也是求连续类问题时用到的最常规的方法,对adate和tag两列得到排好的row_number,作差,根据差值即可得到分组。最后再对组内排序即可,完整代码如下

Select adate, tag,
	Case When tag = 0 Then 0 Else row_number()Over(Partition By diff Order By adate) End conti From
	(
		Select adate, tag,
				Case When tag = 1 Then
					row_number()Over(Order By adate desc) - 
					row_number()Over(Partition By tag Order By adate desc)
					End  diff
				From a
	)tmp
Order By adate desc

下面是逐步拆解
首先对两列进行分组排序,得到两列值。

Select adate, tag,
       row_number()Over(Order 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值