查找字段连续相同的最大值

数据库环境:SQL SERVER 2008R2

有基础数据如图1,要求取出id字段连续值为一组的cn最大值,即图2中红框圈中的部分。

     

先导入基础数据

WITH    x0
          AS ( SELECT   1 AS id ,
                        100 AS cn
               UNION ALL
               SELECT   1 AS id ,
                        200 AS cn
               UNION ALL
               SELECT   1 AS id ,
                        300 AS cn
               UNION ALL
               SELECT   2 AS id ,
                        400 AS cn
               UNION ALL
               SELECT   2 AS id ,
                        200 AS cn
               UNION ALL
               SELECT   1 AS id ,
                        600 AS cn
               UNION ALL
               SELECT   1 AS id ,
                        700 AS cn
             )

    SELECT * INTO #tt FROM x0

实现的步骤分两步,第一步是将连续id分组,则提供的基础数据可以分成3组。

--添加一列自增数量,并插入到新表#t
SELECT IDENTITY(int,1,1) AS rowid,* INTO #t FROM #tt
--将id连续数据分组
WITH    t0 ( rowid, id, cn, groupid )
          AS ( SELECT   rowid ,
                        id ,
                        cn ,
                        1 AS groupid
               FROM     #t
               WHERE    rowid = 1
               UNION ALL
               SELECT   a.rowid ,
                        a.id ,
                        a.cn ,
                        CASE WHEN a.id = b.id THEN b.groupid
                             ELSE b.groupid + 1
                        END groupid
               FROM     #t a
                        INNER JOIN t0 b ON b.rowid = a.rowid - 1
             )

分组后的数据如下图

第二步,按照groupid字段分组,并找出组中最大的cn值。

SELECT  id ,
            cn
    FROM    ( SELECT    id ,
                        cn ,
                        MAX(cn) OVER ( PARTITION BY groupid ) AS mcn
              FROM      t0
            ) t
    WHERE   cn = mcn

最终结果如图

时间: 2024-08-29 13:05:23

查找字段连续相同的最大值的相关文章

mysql通过字段注释查找字段名称

原文:mysql通过字段注释查找字段名称 有时候表的字段太多,只是大致记得表的注释,想通过字段注释查找字段名称,可以用如下语句: SELECT COLUMN_NAME,column_comment FROM INFORMATION_SCHEMA.Columns WHERE table_name='tj_record' AND table_schema='tianjin_20140811' AND column_comment LIKE  '%数据是否有效%' 其中table_schema为数据库

查找字段 如何 过滤

dm.ADOTbBug 使用Filter 属性的话,不能包括 查找字段. 方法1 在过滤事件里 使用查找字段. http://www.itdelphi.com/delphibbs/doc/2001/558361.htm 方法2 就是使用查找字段对应的KeyFields 为字段名. 比如查找字段是 部门名称,对应的数据集里KeyFields是部门编号 对待过滤的数据集不能使用 (LookupField)部门名称= Edit1.Text 只能使用 (查找字段的KeyFields)部门编号= Edit

查找字段 和查找组件

object ADOTbBugShop: TWideStringField //数据集中的查找(永久)字段 比如 部门名称 FieldKind = fkLookup FieldName = 'Shop'目标数据集-部门名称-就是查找字段 LookupDataSet = ADOTblShop //查找来源LookupKeyFields = 'ID'// 查找来源LookupResultField = 'Shop'//查找来源 - 部门名称-显示的 KeyFields = 'ShopID'//目标数

查找字段下拉记录的排序是什么?找到的可能答案

关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复237或者20161122可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me . 这个是我的微信公众号推送的一个悬赏题目,原文是: CRM中查找字段下拉出来的最多10个选项中,如何设定他们的显示顺序?与表单上查找字段的自动解决属性设置有关系吗?与查找实体的查找视图的排序有关系吗?通过设置或者代码如何控制他们出现的顺序?欢迎各位看官留言回答,得到答案后我也会分享到我的博客

mysql查找某连续字段中断的编号

查询dj_pxlb表中zwh 空缺的值 select model2.zwh-1 as kqzwh from (select model1.zwh from dj_pxlb as model1 where model1.ccbh ='abc' order by model1.zwh desc) as model2 where model2.zwh>1 and not exists (select model3.zwh from dj_pxlb as model3 where  model3.ccb

查找任意数目参数的最大值

<C和指针>第7章第4道编程题: 编写一个名叫max_list的函数,它用于检查任意数目的整型参数并返回它们中的最大值.参数列表必须以一个负值结尾,提示列表的结束. 1 /* 2 ** 查找任意数目的整型参数中的最大值 3 */ 4 5 #include <stdio.h> 6 /* 7 ** 要实现可变参数列表,需要包含stdarg.h文件 8 ** stdarg.h中声明了va_list, va_start, va_arg 和 va_end 9 */ 10 #include &

sql server查找字段中含有汉字

/***************************************************************%%%% 描述: SQL语句查询字段中是否包含汉字%%****************************************************************%% 编写:[email protected] 2007-12-17%% 说明:如有转载请注明来处http://blog.sina.com.cn/houkuan***************

sql server 查找字段上的约束

1. 当字段没有默认值或者约束的时候可以使用: alter table [table_name] drop column [column_name] 来删除. 当有默认值的时候应该先删除默认值,然后再删除此列,不然会报错.具体方法如下 select b.name from sysobjects b join syscolumns a on b.id = a.cdefault where a.id = object_id('表名') and a.name = '列名'”; ALTER TABLE

Dynamics CRM2016 Web API之获取查找字段的text及选项集的text

本篇再来介绍个web api的功能,关于lookup的text这里只是略带,因为有expand,现有的web api就能实现,主要提的是选项集的text,我们通过基本的查询api查出来的字段值只带有value,如果想要获取text也很简单,只需要在request的头部加一条信息即可,下面分别给出了C#及JS的示例代码. HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(weburi); req.Credentials = new