Sql获取数据集中各类型中的最大值(最新值)
2013-08-05 13:41
288 查看
最近在论坛中的MS Sql Server版块经常看到网友求助如何从一组数据集中获取每个类型中的某个字段最大的一条记录或者最新记录,首先大家都会想到采用group关键字分组,再利用max()函数获取最大的一条记录,但这样只能返回分组的字段,不能返回所有的字段,因此我在这里提供一种解决方法。
创建表语句
向表中插入测试数据
用select语句查询得到的结果
期望结果
开始我们都会采用分组和聚合函数的方式
但这样得到的结果只能包含pid和op_time字段,不能包含这个表中所有的字段,因此我这里提供一种方法,对每个pid的数据进行排序,然后再取第一个
创建表语句
USE [master] GO /****** Object: Table [dbo].[Table_1] Script Date: 08/05/2013 13:21:28 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Table_1]( [id] [int] NOT NULL, [pid] [int] NOT NULL, [op_type] [varchar](50) NOT NULL, [op_time] [datetime] NULL, [op_man] [varchar](50) NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO
向表中插入测试数据
insert into [master].[dbo].[Table_1] ([id],[pid],[op_type],[op_time],[op_man]) values( 1 , 1 , '手动' , '2013-03-05 00:00:00.000' , 'A' ); insert into [master].[dbo].[Table_1] ([id],[pid],[op_type],[op_time],[op_man]) values( 2 , 1 , '自动' , '2013-05-05 00:00:00.000' , 'B' ); insert into [master].[dbo].[Table_1] ([id],[pid],[op_type],[op_time],[op_man]) values( 3 , 2 , '手动' , '2013-06-06 00:00:00.000' , 'A' ); insert into [master].[dbo].[Table_1] ([id],[pid],[op_type],[op_time],[op_man]) values( 4 , 1 , '手动' , '2013-06-06 00:00:00.000' , 'A' ); insert into [master].[dbo].[Table_1] ([id],[pid],[op_type],[op_time],[op_man]) values( 5 , 1 , '自动' , '2013-06-07 00:00:00.000' , 'A' ); insert into [master].[dbo].[Table_1] ([id],[pid],[op_type],[op_time],[op_man]) values( 6 , 2 , '自动' , '2013-06-07 00:00:00.000' , 'B' );
用select语句查询得到的结果
期望结果
开始我们都会采用分组和聚合函数的方式
SELECT [pid],max([op_time]) as op_time FROM [master].[dbo].[Table_1] group by pid
但这样得到的结果只能包含pid和op_time字段,不能包含这个表中所有的字段,因此我这里提供一种方法,对每个pid的数据进行排序,然后再取第一个
select * from ( SELECT t.*,ROW_NUMBER() over (partition by t.pid order by t.op_time desc) num FROM [master].[dbo].[Table_1] t ) a where num=1 GO
相关文章推荐
- Sql获取数据集中各类型中的最大值(最新值)
- EntityManager转换为Hibernate的Session执行sql获取Map类型的数据集合
- 怎样写获取时间最大的数据记录的sql语句
- 用SQL语句获取MSSQL表关键字段的名称、数据类型和长度
- sql获取数据库中数据表的字段名称,类型等信息
- 本地动态SQL(Open for等)如何获取SQL的定义属性,包括栏位名称和数据类型
- SQL获取指定数据表所有字段类型和精度脚本
- SQL获取指定数据表所有字段类型和精度脚本
- C++中获取内置数据类型最大值、最小值的模板类
- 获取sql server数据库中所有用户表名及在sql server中怎样用sql得到库中所有的表名以及表的结构(列名和数据类型)
- 根据时间获取最新数据 SQL(每一个人或者每一项)
- C++中获取一个原生数据类型能表示的最大值
- SQL语句获取列数据类型
- SQL获取指定数据表所有字段类型和精度脚本
- 获取最新(最大)值的一条数据select * from dbname where id=(select max(id) from dbname)
- SQL获取最新一笔数据的两个查询方法
- day13String获取判断切割替换。最大子串。StringBuffer。基本数据类型对象包装类如Integer。进制转换。自动装箱。
- SQL获取变量类型以及变量最大长度
- 第18天(就业班) 预编译sql处理(防止sql注入)、存储过程、批处理、插入数据获取增长值、事务、大文本类型处理
- Transact-SQL 示例 - 如何获取一个变量的数据类型