求最大的连续数

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求最大的连续数相关的知识,希望对你有一定的参考价值。

摘要:求最大的连续数


原理:同属性的序列差等值,由等差序列派生。

详细描述:

1、首先看下表结构

技术图片

字段说明:serial_no 根据月份派生的连续号;city:城市;YM:YYYYMM格式的月份;price:当月价格;previous_price:上月价格;link_ratio:价格环比(当月价格-上月价格)/上月价格

2、计算过程

为计算方便,我们可以根据价格环比值派生出字段(ratio_sign,int,价格环比是增长还是下降)的值。update?[TB_CITY_PRICE] set?ratio_sign=sign(link_ratio),这样,ratio_sign属性值中,1为增长,-1为下降;

然后根据连续号serial_no 和ratio_sign,计算哪些月份是连续的。

alter table?TB_CITY_PRICE add?serial_up_value int; --连续增长值
update a ?set a.serial_up_value=a.link_sign
from
(
select *,serial_no-(select count(*) from [TB_CITY_PRICE]?
where ratio_sign=a.ratio_sign and city=a.city and serial_no from [TB_CITY_PRICE] as a where a.ratio_sign=‘1‘
) as a
技术图片
根据连续增长值,就很轻松的获得最大增长值了。
--up
alter table TB_CITY_PRICE add??is_max_up_follow int;--最大增长值

update a set a.is_max_up_follow=b.max_row_count
from [TB_CITY_PRICE] as a inner join (
select *?
from?
(
select max(row_count) over(partition by city) ?as max_row_count,*
from (select city,serial_up_value,count(*) as row_count from [dbo].[TB_CITY_PRICE]
where serial_up_value is not null group by city,serial_up_value) as b
) as c
where c.max_row_count=c.row_count) as b
on a.city=b.city and a.serial_up_value=b.serial_up_value
技术图片

最后查看结果

select ?serial_no,* from [dbo].[TB_CITY_PRICE] where is_max_up_follow is not null ?order by YM option(fast 1)

技术图片

从计算结构可以看出来,价格从2009年5月连续增长4个月。

原文:大专栏  求最大的连续数


以上是关于求最大的连续数的主要内容,如果未能解决你的问题,请参考以下文章

华为OJ平台——求最大连续bit数

华为机试题HJ86求最大连续bit数

华为机试题HJ86求最大连续bit数

求最大的连续数

华为机试HJ86:求最大连续bit数

华为机试HJ86:求最大连续bit数