码迷,mamicode.com
首页 > 其他好文 > 详细

求最大的连续数

时间:2019-09-16 14:47:23      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:查看   not   max   sign   int   border   ble   sel   upd   

摘要:求最大的连续数


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

详细描述:

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个月。

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


求最大的连续数

标签:查看   not   max   sign   int   border   ble   sel   upd   

原文地址:https://www.cnblogs.com/petewell/p/11526630.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!