SQL语句分组获取记录的第一条数据的方法_MsSql

使用Northwind 数据库

首先查询Employees表

查询结果:

city列里面只有5个城市

使用ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) 先进行分组 注:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).

sql语句为:

select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City,ROW_NUMBER() over(partition by City order by EmployeeID) as new_index  
from Employees

执行结果图:

可以看到是按照City分组,EmployeeID排序。

select出分组中的第一条记录

执行语句:

select * from
(select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City,ROW_NUMBER() over(partition by City order by EmployeeID) as new_index  
from Employees) a where a.new_index=1

执行结果图:

时间: 2024-09-17 04:56:22

SQL语句分组获取记录的第一条数据的方法_MsSql的相关文章

SQL语句分组获取记录的第一条数据的方法

使用Northwind 数据库 首先查询Employees表 查询结果: city列里面只有5个城市 使用ROW_NUMBER() OVER(PARTITION BY COL1 ORDER BY COL2) 先进行分组 注:根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). sql语句为: select EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,City,ROW_NUM

SQL Server删除表及删除表中数据的方法_MsSql

本文介绍SQL Server中如何删除表,如何删除表中的数据.在删除表数据时有delete和truncate两种方法,delete和truncate有什么区别呢? SQL Server,我们现在基本上使用的最古老的版本应该是SQL Server 2000吧,应该没有更早的版本了吧?!从SQL Server 2000开始,到SQL Server 2005,2008,2012等,T-SQL的处理能力越来越强.今天我们就来说说如何使用T-SQL脚本来删除表,以及删除表中的数据. 删除表和删除表数据这是

c# 事务处理 发现第一条sql语句执行插入成功了 第二条执行更新没成功

问题描述 c# 事务处理 发现第一条sql语句执行插入成功了 第二条执行更新没成功 求助高手帮忙分析一下 这个函数会不会出现我说的那种状况 两条指令第一条往Table1插入了一条信息 第二条更新Table2的某个字段 奇怪的是Table1插入了一条信息 但Table2没执行更新 不知道是不是这个函数的原因 如果这个函数不会出现这种状况麻烦高手帮忙分析一下可能是什么原因 谢谢 public void ExecuteScalar(CommandType cmdType, string[] cmdTe

SQL语句去掉重复记录,获取重复记录_MsSql

SQL语句去掉重复记录,获取重复记录  --查询一个表中有效去掉重复的记录,UserID为自增长主键,RoleID为重复字段 SELECT MIN(UserID) AS UserID, RoleID FROM tmpTable GROUP BY RoleID SELECT RoleID FROM tmpTable GROUP BY RoleID HAVING (COUNT(*) > 1) SELECT DISTINCT * FROM tmpTable sql语句查询 sql server acc

急急!!SQL数据库中怎么获取每半小时内的第一条数据或者半小时内的平均值?

问题描述 我在数据库中每2分钟存入一条数据,但中间会有中断情况,就是可能半小时内没有数据,也可能有很多条数据,现在想取半小时内的第一条数据或者半小时内的平均值,想问下各位大侠有无好的方法,不想用循环,我的数据量很大,循环很慢.之前用时间条件后加datediff(minute,startime,time)%30=0,只能取到整半小时的数据,而我的数据可能是31分,1分,这样就取不到数据. 解决方案 解决方案二:1.在数据库的操作:做个标识列,取最大值.或者按时间排序,取半小时内的数据.2.在软件里

Oracle调用接口(OCI)源码剖析(2):执行SQL语句并获取结果

概述 接着上一篇文章<Oracle调用接口(OCI)源码剖析(1):创建数据库连接>,我们继续对OCI中执行SQL语句并获取结果的源码进行剖析.该操作主要是由两个函数完成的:CDbExecSql和CDbFetch,其中CDbExecSql函数用于执行普通SQL语句,CDbFetch函数用于获取数据库的返回结果. 下面对这两个函数的源码进行分析. OCI中执行SQL语句并获取结果的源码剖析 1.执行普通SQL语句的操作 在OCI中,执行普通SQL语句的操作是由CDbExecSql函数实现的,其代

SQL语句删除重复记录

问题:如何把具有相同字段的记录删除,只留下一条.   例如:表test里有id,name字段,如果有name相同的记录只留下一条,其余的删除.name的内容不定,相同的记录数不定.   用SQL语句删除重复记录的方法: 1.将重复的记录记入temp1表   select [标志字段id],count(*) into temp1 from [表名] group by [标志字段id] having count(*)>1 2.将不重复的记录记入temp1表   insert temp1 select

hql语句只能查询出数据库里面的第一条数据

问题描述 hql语句只能查询出数据库里面的第一条数据 dao层 //查询所有的信息 public List<Stock> getAll() { String hql = ""FROM Stock s LEFT OUTER JOIN FETCH s.people""; return getSession().createQuery(hql).list(); } service层 public List<Stock> getAll() { ret

如何写一个方法用SQL语句查询一张表中有多少条数据,方法改怎么写?

问题描述 如何写一个方法用SQL语句查询一张表中有多少条数据,方法改怎么写? 将查询的的返回值为整型 参考用例 类似 以下方法查询政治类新闻人数 新手不知道该如何改动成自己需要的方法 public Map<String, Long> sumPolEntNews(){ //查询政治类新闻人数总和 String sql = "select count(*) from t_user where newsh ='政治类新闻' "; Map<String, Long> m