求最大的连续数

摘要:求最大的连续数

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

详细描述:

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

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

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

时间: 2024-10-14 21:04:00

求最大的连续数的相关文章

待字闺中之最多连续数的子集

题目来源,待字闺中,原创@陈利人 ,欢迎大家继续关注微信公众账号"待字闺中" 给一个整数数组a[]. 找到当中包括最多连续数的子集,比方给:15, 7, 12, 6, 14, 13, 9, 11,则返回: 5:[11, 12, 13, 14, 15] . 分析:最简单的方法是sort然后scan一遍,可是要 o(nlgn) , 有什么 O(n) 的方法吗?网上有人用map或set来做.但map或set的复杂度还是O(nlgn).并查集能够做到O(n),此题用并查集比較简单. 下面參考h

求最大和连续子向量问题的算法分析

1 问题描述 这是从<编程珠玑(第 2 版)>的第 8 章"算法设计技术"中看到的一个问题.问题的描述是这样的, "问题的输入是具有 n 个浮点数的向量 x,输出是输入向量的任何连续子向量中的最大和.例如,如果输入向量包含下面 10个元素:(31,-41,59,26,-53,97,-93,-23,84) 那么该程序的输出为x[2...6] 的总和,即 187." 当所有的数都是正数时,问题很容易解决,此时最大的子向量就是输入向量本身.但如果输入向量中含有

统计数列中是连续数的个数

数据库环境:SQL SERVER2008R2 今天在群里看到一位网友提的需求,要求统计一组数据中前3位是连续数的个数,具体看贴图. 实现这个需求蛮简单的,说下我的思路: 取前3位,然后减去123,再和111求余,如果结果是0,说明这3位数连续. 是不是很简单呀,下面直接上代码. /*数据准备*/ WITH x0 AS ( SELECT 1234 AS tn UNION ALL SELECT 1235 AS tn UNION ALL SELECT 1236 AS tn UNION ALL SELE

数组:最多连续数的子集

[数组分割]http://blog.csdn.net/hackbuteer1/article/details/7638305 给一个整数数组, 找到其中包含最多连续数的子集. ===================================================================== map<int, int>,它的key是一个起始的数字,value是这个起始数字起连续的个数.这样这个数组遍历一遍下来,只要map维护好了,自然就能得到最长的连续子串了,并且算法复杂

和为s的两个数,一串连续数 41

? ? 引言 ? ? 第一问题很简单,leetcode上也有相应的题,2Sum问题,leetcode上还有2Sum的进阶版3Sum,只是在这个问题上增加了一层循环而已,另外还有3Sum_Close问题,就是和接近s的三个数,本文将依次介绍2Sum问题,3Sum问题,以及3Sum_close,以及一串连续数问题 ? ? 对于3Sum的问题,本文除了常用的退化为2Sum的n平方的解法外,还提供了一种hash的方法,使得利用hash的方法使得4Sum问题不再是n三次方的时间复杂度,可以降到n平方的时间

Task 4 求数组的连续子数组的最大和(团队合作)

小组成员:李敏.刘子晗 1.设计思想:由于已经做过这个题目,只要对之前的程序加上相应的测试和约束即可.我们两个人一起商议后,决定了程序的主框架和并列出了最终可以实现的功能.先要定义数组长度和上下限的变量,然后通过if语句对用户所给出的长度和数值进行判断看是否合法,如果不合法要重新输入.最后再加上之前求和的相应代码即可. 2.出现的问题:我们达成协议后,李敏负责编程,我负责测试.开始写程序,在写判断数值是否满足int整型范围的时候出现了错误,我在测试的时候发现她把小于号错写成了大于号,然后加以改正

输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和。要求时间复杂度为O(n)(解决)

输入一个整形数组(可能有正数和负数),求数组中连续子数组(最少有一个元素)的最大和.要求时间复杂度为O(n). 输入描述: [重要]第一行为数组的长度N(N>=1) 接下来N行,每行一个数,代表数组的N个元素 输出描述: 最大和的结果 输入例子1: 8 1 -2 3 10 -4 7 2 -5 输出例子1: 18 思路:对输入的数组进行计算, import java.util.Scanner; public class Main { public static void main(String[]

一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数

昨天晚上看了一道逻辑题:一个自然数在1700和1800之间,且被5除余3,被7除余4,被11除余6,求符合条件的数.题目后面写着,有人看了几分钟便给出了答案.我很好奇,此人是如何解答的. 我自己先琢磨了下,拿笔算了半天,最后一个巧合的情况下,得到了答案.此题的一个关键且明显的推论是:能被5除余3的数,肯定最后一位是3或者8.那么接下来怎么推呢?我从网上搜集了答案. 方案1: 这个数被5除余3,则此数个位数为3或8, 设这个数十位为x,则此数可表达为1703+10x,或1708+10x当此数为17

2015年百度之星初赛(1) --- B 找连续数

找连续数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 179    Accepted Submission(s): 65 Problem Description 小度熊拿到了一个无序的数组,对于这个数组,小度熊想知道是否能找到一个k 的区间,里面的 k 个数字排完序后是连续的. 现在小度熊增加题目难度,他不想知道是否有这样的 k 的区