【记录】T-SQL 分组排序中取出最新数据

原文:【记录】T-SQL 分组排序中取出最新数据

示例 Product 表结构:

示例 Product 表数据:

想要的效果是,以 GroupName 字段分组,取出分组中通过 Sort 降序最新的数据,通过示例数据,可以推算出结果数据的 ID 应该为:7、5、3。

示例 SQL 代码:

select * from Product p where ID=(select top 1 ID from Product where p.GroupName=GroupName order by Sort desc) order by Sort desc

并没有使用 group by 或 distinct,一行代码搞定,但这种方式会造成性能问题。

使用 group by 代码示例:

select p1.* from Product p1
inner (select MAX(p2.ID) from Product p2 group by p2.GroupName) p3 on p1.ID=p3.ID

执行结果:

时间: 2024-10-20 23:52:41

【记录】T-SQL 分组排序中取出最新数据的相关文章

记录个Sql分组使用

话说好久没写Sql了,结果和其他小组的同事写Sql的时候遭到鄙视了,看来Sql是永远不能丢的,有时间就要温习一下. 创建3张表: Rel_SutAndCourse,T_Course,T_Stu 为3张表填充数据: ----Student begin transaction insert T_Stu(StuCode,StuName,Sex) values ('Stu001','zhang chu chu',1) insert T_Stu(StuCode,StuName,Sex) values ('

清空SQL Server数据库中所有表数据的方法

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录. 说道删除数据记录,

sql如何根据时间取出最新的数据记录

1-如何根据时间取出最新的数据记录 例子:table1 :userCode   name            datetime107        tom            2017/6/21 22:34 107        tom            2017/6/24 10:21 107 tom            2017/12/7 10:45 107 tom            2017/1/15 14:01 107 tom           2017/12/26 14:

SQL Server数据库中导入导出数据及结构时主外键关系的处理

2015-01-26 软件开发中,经常涉及到不同数据库(包括不同产品的不同版本)之间的数据结构与数据的导入导出.处理过程中会遇到很多问题,尤为突出重要的一个问题就是主从表之间,从表有外检约束,从而导致部分数据无法导入. 情景一.同一数据库产品,相同版本 此种情况下源数据库与目标数据库的数据结构与数据的导入导出非常简单. 方法1:备份源数据库,恢复到目标数据库即完成. 方法2:使用SQL Sever数据库自带的[复制数据库]功能或者[导入数据]功能按照向导操作即可. 情景二.同一数据库产品,不同版

怎么在SQL Server 2008中还原.mdf数据文件

还原数据库文件的过程中,只有mdf文件,该怎么还原?在原来的SQL Server 2005中直接点击数据库然后附加就可以还原,但是在2008 版本中附加数据库文件则会出错(只有mdf文件){执行Transact-SQL语句或处理时发生异常}那么现在就可以打开数据库的两个文件(mdf,ldf),右键属性, 选择Administrators(也就是本机用户),将权限修改为完全控制,同样另外的文件也按照这样操作,然后按照上面的步骤还原数据库.另外一种方法是将上面的两个文件直接复制到系统数据库的默认目录

【SQL语句】查询某个表在某时间段中的最新数据

一.思路:首先查询在某个时间段中最新时间的字段,然后用查到的字段与原来的表作自连接,最后对自连接后的表进行所需字段的查询. 二.sql语句: SELECT *FROM ( SELECT max(i.createDate) AS createDate, r.websiteConfigInfo_id AS webId FROM run r WHERE r.staticsEndTime BETWEEN : beginTime AND : endTime AND r.websiteConfigInfo_

SQL 分组排序分页(大神帮写的膜拜一下)

查询全部: SELECT P3.ID, P3.Name, P3.AddTimeFROM (SELECT Name, MAX(AddTime) AS MaxAddTime FROM Product AS P1 GROUP BY Name) AS P2INNER JOIN Product AS P3 ON P2.Name = P3.NameORDER BY P2.MaxAddTime DESC, P3.AddTime DESC, P3.ID DESC 正反TOP方法的分页(每页5行,查第5页,即第2

Sql同一列中两条数据时间差计算

问题:从提出需求到需求通过,中间会经历不确定次数的“驳回->撤销驳回”的操作,所有的操作时间都位于同一列.求:需求从提出到通过经历的时间(不包含“驳回-撤销驳回”所消耗的时间) PS: “驳回->撤销驳回”操作成对出现:且按时间顺序排列. 1. 建表 IF OBJECT_ID('tempdb..#logs','U')is NOT NULL DROP TABLE #logs IF OBJECT_ID('tempdb..#logs2','U')is NOT NULL DROP TABLE #log

SQL SERVER 数据库中几百万数据查询优化

1.当需要查询表中所有数据时 比较以下三种查询语句: 假设数据表为BasicMsg20170401,共有17列,数据条数为两百八十四万 (1)SELECT * FROM  BasicMsg20170401 耗时44秒以上 (2)SELECT 列1,列2... FROM  BasicMsg20170401 耗时28~30秒上下 (3)SELECT 列1,列2... FROM  BasicMsg20170401 WITH  (index(SelAA_Index) ) 强制加入非聚集索引后,耗时23~