SQL分类取每一类第一项
实际应用中经常会碰到这样的需求,在给定的数据集中要求返回每一类型中最大的一条,抑或是最小的一条,抑或是按时间排序最近的一条等等。很多人面对这样的需求显得束手无策,其实这个需求实现有很多种方法,今天给大家介绍总结的几种方法。
创建用例表
CREATE TABLE [dbo].[Table_3](
[time] [datetime] NULL,
[City] [varchar](10) NULL,
[count] [int] NULL
) ON [PRIMARY] GO
给用例表插入一些数据后,查用例表得到的结果
需求是获得每个市的count值最大的一条记录,即
方法1:group by
SELECT City,MAX(count) as count
FROM [master].[dbo].[Table_3]
group by City
这种方法的弊病是只能获取分组列和进行聚合函数运算的列的信息,丢失了其它列的信息
方法2:ROW_NUMBER()
with cte as
(
SELECT t.*,ROW_NUMBER() over(partition by City order by count desc) id
FROM [master].[dbo].[Table_3] t
) select * from cte where id=1
这种方法的好处就是不会丢弃列的信息,而且想获取某个分类的前一条,前二条都可以
还有DENSE_RANK()和RANK()也可以用来分组排序,二者对于重复的数据都会给相同的编号,但是接下来的数据DENSE_RANK()是紧接着顺序编号,RANK()对于接下来的数据给予的编号是按照所处的位置编号。
方法3:cross apply
select b.* from
(
SELECT distinct [City]
FROM [master].[dbo].[Table_3] a
) a
cross apply (select top 1 * from [master].[dbo].[Table_3] t where a.City=t.City order by count) b
SQL分类取每一类第一项的更多相关文章
- SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束
SQL基础随记1 SQL分类 常用函数 ALL ANY EXISTS IN 约束 其实这里知识不难,只是好久不接触突然被问的话有时还真的一时答不上,自己写一遍胜过盲扫.当然,也有些常读常新的地方会 ...
- MSSQL 分组后取每组第一条(group by order by)
查询中经常遇到这种查询,分组后取每组第一条.分享下一个SQL语句: --根据 x 分组后.根据 y 排序后取第一条 select * from ( select ROW_NUMBER() over(p ...
- SQL Server取系统当前时间【转】
getdate //获得系统当前日期 datepart //获取日期指定部分(年月日时分表) getdate()函数:取得系统当前的日期和时间.返回值为datetime类型的. 用法:getdate( ...
- .Net程序员学用Oracle系列(28):PLSQL 之SQL分类和动态SQL
1.SQL 语句分类 1.1.分类方法及类型 1.2.数据定义语言 1.3.数据操纵语言 1.4.其它语句 2.动态 SQL 理论 2.1.动态 SQL 的用途 2.2.动态 SQL 的语法 2.3. ...
- oracle分组取每组第一条数据
oracle分组后取每组第一条数据 '数据格式 分组取第一条的效果 [sql] SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY ...
- Linux安装Mysql8.0及SQL分类的补充
Linux安装Mysql8.0 参考文章:https://blog.csdn.net/qq_38570633/article/details/109257430 参考文献:https://blog.c ...
- 在v-for中利用index来对第一项添加class(vue2.0)
<li v-for="(el,index) in event" v-bind:class="{ 'm-swipe-active': !index}"> ...
- Extjs ComboBox 动态选中第一项
有时候我们希望通过Store加载过来的数据,ComboBoxItem能够选择第一条数据作为默认数据,我们可以这么操作: var storeinfo = Ext.create('Ext.data.Sto ...
- DropDownList为啥总是获取第一项的值???
小菜: DropDownList控件绑定的数据,在获取数据时总是获取到第一项,很是郁闷,怎么回事,于是就各种想,都没有找到问题的原因. 请看下面的代码 前台代码: <asp:DropDownLi ...
随机推荐
- SQL Server 锁的 8 种类型
第1种. 共享锁.由读取查寻产生. 第2种. 意向锁.用意向锁来表示有将要获得某一资源的意向. 第3种. 更新锁.在修改数据前获得. 第4种. 排它锁.用于独占某一资源时获得. 第5种. 架构锁.运行 ...
- Oracle EBS-SQL (OM-4):检查发运网络.sql
select msn.FROM_ORGANIZATION_CODE 开始库存组织, msn.FROM_ORGANIZATION_NAME 开始库存名称, ...
- C#多显示器转换的两种方法——SetWindowPos,Screen
原文 http://blog.csdn.net/hejialin666/article/details/6057551 实现多屏显示目的:一般情况下是一个电脑显示屏,外接一个电视显示屏.在电脑上显示的 ...
- Matalab之模糊KMeans原理
对Kmeans方法相信大家都会不陌生,这是一种广泛被应用的基于划分的聚类算法.首先对它的核心思想做一个简单的介绍: 算法把n个向量xj(1,2…,n)分为c个组Gi(i=1,2,…,c),并求每组的聚 ...
- emacs使用指南
上大学的时候使用过几个简单的命令,用上windows后除了dos很少用命令行处理问题.现在MBP在手不用用emacs多可惜啊. 我上午搜索了下资料,都说emacs是神器,但是神不神看个人啦.这东西也不 ...
- inet address example(socket)
package com.opensource.socket; import java.net.Inet4Address; import java.net.Inet6Address; import ja ...
- they're hiring
Gather Health ⋅ Careers Careers at Gather
- Ubuntu 查找命令
Ubuntu 查找文件夹 使用find命令查找find / -name 文件夹名称 -type d找到结果中含有路径 查找命令 从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR” ...
- Java报错--Unsupported major.minor version 52.0
遇到一个Java相关的报错: ... java.lang.UnsupportedClassVersionError: ... : Unsupported major.minor version 52. ...
- asp.net中的绝对路径和相对路径
一.关于相对路径和绝对路径相对路径转绝对路径一般,我们在ASP.NET网站中往往需要把一个相对路径转化为绝对路径.通常是用Server.MapPath()方法.比如网站根目录下有 个"Upl ...