`

转:sql server 获取每一个类别中值最大的一条数据

阅读更多

转载链接:http://www.cnblogs.com/zfanlong1314/p/3393946.html

 

/*
数据如下:
name val memo
a    2   a2(a的第二个值)
a    1   a1--a的第一个值
a    3   a3:a的第三个值
b    1   b1--b的第一个值
b    3   b3:b的第三个值
b    2   b2b2b2b2
b    4   b4b4
b    5   b5b5b5b5b5
*/
--创建表并插入数据:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a',    2,   'a2(a的第二个值)')
insert into tb values('a',    1,   'a1--a的第一个值')
insert into tb values('a',    3,   'a3:a的第三个值')
insert into tb values('b',    1,   'b1--b的第一个值')
insert into tb values('b',    3,   'b3:b的第三个值')
insert into tb values('b',    2,   'b2b2b2b2')
insert into tb values('b',    4,   'b4b4')
insert into tb values('b',    5,   'b5b5b5b5b5')
go
   
--一、按name分组取val最大的值所在行的数据。
--方法1:
select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name
--方法2:
select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val)
--方法3:
select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
--方法4:
select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
--方法5
select a.* from tb a where 1 > (select count(*) from tb where name = a.name and val > a.val ) order by a.name
--写法6
SELECT  *
FROM    (
          SELECT    * ,
                    ROW_NUMBER() OVER ( PARTITION BY name ORDER BY val DESC ) rid
          FROM      tb
        ) AS t
WHERE   rid = 1
--结果如下:
/*
name       val         memo                 
---------- ----------- -------------------- 
a          3           a3:a的第三个值
b          5           b5b5b5b5b5
*/

 

如果上述存在一个name组中有两个以上相同的val,则查询方法1-5不正确。

例如:

insert into tb values('a',    2,   'a2(a的第二个值)') 
insert into tb values('a',    3,   'a1--a的第一个值') 
insert into tb values('a',    3,   'a3:a的第三个值')

 


 

 

  • 大小: 11.2 KB
分享到:
评论

相关推荐

    在SQL Server 2005里更简单地计算中值.pdf

    为了更好地理解中值的计算和SQL Server中的应用,文章通过一个实际的例子来说明如何为每个员工计算中值。示例中涉及到创建视图并使用SQL查询语句,结合窗口函数和CTE来提取中值。例如,文中首先给出了创建视图的SQL...

    midfilter.zip_一维中值滤波_平滑数据_数据处理_数据平滑_数据平滑处理

    在给定一个数据点x_i,我们选择一个窗口大小N,例如3、5或7等奇数,这样窗口内包含了数据点x_i以及其两侧的N/2个点。然后,对这个窗口内的所有点进行排序,选取位于中间位置的值作为中值m_i。最后,原始数据点x_i被...

    数据库sqlserver关键字

    数据库管理系统(DBMS)中的 SQL Server 是一种关系型数据库管理系统,用于存储、管理和检索数据。为了高效地管理和操作数据库,SQL Server 提供了一系列关键字和语法,以下是 SQL Server 的一些常用关键字和语法。 ...

    一维中值滤波.

    这种滤波方法基于一个基本思想:在一段连续的数据序列中,噪声通常表现为异常值,而正常信号则更接近于周围的平均值。中值滤波器通过替换每个点的值为该点邻域内的中值来实现这一目标,从而有效地抑制了噪声的影响。...

    在MATLAB中对三维点云数据进行中值滤波

    在MATLAB中对三维点云数据进行中值滤波是一个重要的图像处理步骤,常用于去除噪声,特别是针对具有高斯噪声或椒盐噪声的点云数据。中值滤波是一种非线性的滤波方法,它在处理噪声时具有独特的优势,能够保留边缘信息...

    SQL SERVER数据完整性及约束.pdf

    SQL Server中的数据完整性可以分为四个主要类别:实体完整性、域完整性、引用完整性和用户定义完整性。 实体完整性是确保表中每条记录都是唯一的,它通常通过主键来实现。主键约束保证了表中每一行的唯一性,主键的...

    SQL Server 2005 提供了4个行号排序函数

    `RANK()` 函数也为分区中的每一行分配一个唯一的数字,但它会跳过排序列中值相等的行。换句话说,如果多行具有相同的排序键,则它们将获得相同的排名,下一排的行将跳过这些排名。 **语法**: ```sql SELECT RANK()...

    查找链表中值最大的节点

    递归的方式查找链表中值最大的节点,用于交流学习。 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑...每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域

    SQL Server2008DataProfilins揭示SQLServer2008集成服务中隐藏的宝藏.pdf

    在深入探讨《SQL Server2008 Data Profiling揭示SQL Server ...文章在内容上突出强调了数据概要分析在SQL Server 2008 BI平台中的应用,并为数据库专业人士提供了一个实用的参考文献,使得“隐藏的宝藏”得以揭开面纱。

    winForm中主窗体Form获取弹出窗体的中值

    WinForm 中主窗体 Form 获取弹出窗体的中值 WinForm 是一个基于 Windows Forms 的应用程序框架,用于构建 Windows 桌面应用程序。在 WinForm 中,窗体(Form)是应用程序的基本组成部分,用于显示和交互用户界面。...

    使用c++语言对采集非线性数据进行中值滤波

    例如,假设我们选择5点的窗口(3个前点,中心点,3个后点),那么对于每个数据点,我们需要获取其周围的5个点,对这些点的值进行排序,然后取中间的那个值作为新值。排序可以使用内置的std::sort函数,而选取中位数...

    dsp中值滤波 dsp中值滤波

    中值滤波的基本原理是:假设我们有一个窗口(也称为滤波器模板),该窗口在图像上滑动,对于窗口内的每个像素点,不是简单地用平均值替换它,而是选取像素值的中值。这样,噪声点(通常是极端值)会被周围像素的平均...

    中值滤波verilog代码

    例如,可以设计流水线结构,使得在计算一个像素的中值时,其他像素的数据预处理已经在进行。 6. **边界处理**:在处理图像边缘时,需要考虑如何填充边界像素,常见的方法有镜像法、循环法等。 7. **综合与仿真**:...

    Microsoft sql Server 入门系列文档.doc

    - **定义**:SQL Server 查询优化器是一个自动化的工具,用于确定执行SQL语句的最佳方式。 - **作用**:通过分析查询语句和数据库结构,生成高效的执行计划。 - **重要性**:合理的使用约束条件可以帮助优化器更好地...

    SQL Server数据库开发的二十一条军规

    【SQL Server 数据库开发的二十一条军规】是针对SQL Server数据库开发人员的重要准则,旨在提高数据库性能和设计质量。以下是对这些军规的详细解释: 1. **了解你的工具**:深入理解T-SQL语言和SQL Server提供的...

    中值滤波Java实现

    中值滤波的基本原理是:对于图像中每个像素点,我们选择一个窗口(通常为奇数大小的邻域),然后对窗口内的所有像素灰度值进行排序,取中间值作为该像素点的新灰度值。这个中间值就是“中值”,因此得名“中值滤波”...

    数据处理 中值滤波 幅值测算

    数据处理,给进数组利用c#进行可变窗口的中值滤波,滤波后进行幅值测算

    中值滤波Verilog代码

    中值滤波器通常采用一个固定大小的窗口(例如3x3或5x5),该窗口在图像上滑动,对每个位置的像素进行处理。窗口内的像素灰度值按照一定的顺序排列,然后取中间的值作为该位置的新灰度值。对于椒盐噪声,由于噪声点的...

    SQL Server 2005入门

    表是数据库中最基本的结构,它可以被视为行和列构成的二维结构,其中每一行代表一条记录,每一列则代表记录的一个字段。在创建表之前,需要先确定表要包含的数据类型,列数及数据类型长度,是否允许空值,以及是否要...

    7.sql.server.2005.简单查询2 7.sql.server.2005.简单查询2

    在SQL Server 2005中,简单查询通常涉及SELECT语句,它是用来从一个或多个表中检索数据的基础工具。以下是一些核心概念: 1. **SELECT语句**:这是SQL中最基础的查询语句,用于从表中选择想要的数据列。例如,`...

Global site tag (gtag.js) - Google Analytics