以前在开发的时候遇到过一个需求,就是要按照某一列进行分组后取前几条数据,今天又有同事碰到了,帮解决了之后顺便写一篇博客记录一下. 首先先建一个基础数据表,代码如下: IF OBJECT_ID(N'Test') IS NOT NULL BEGIN DROP TABLE Test END CREATE TABLE Test(ID bigint IDENTITY(1,1),Name nvarchar(50),Department nvarchar(50)) INSERT IN
查询中经常遇到这种查询,分组后取每组第一条.分享下一个SQL语句: --根据 x 分组后.根据 y 排序后取第一条 select * from ( select ROW_NUMBER() over(partition by x order by y desc) RowNum ,testTable.* 注:我使用MS SQL 08 R2
一.需要实现分组排序并且取组内状态优先级最高的数据 有一张这样的数据表, 需求是根据error_type分组然后取status最小的第一条数据 第一种写法: select t.* from ( select e.* from error_record e where e.status > 0 and e.error_type > 0 order by ) t group by t.error_type 这个写法无法实现我们的需求, 原因是MySQL分组查询时默认按照id从小到大的顺序排列让我们
首先,将按条件查询并排序的结果查询出来. mysql order by accepttime desc; +---------------------+------+-----+ | accepttime | user | job | +---------------------+------+-----+ :: | :: | :: | :: | +---------------------+------+-----+ rows in set 然后,从中分组选出最新一条记录. mysql ord
在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条数据的sql都是使用row_number() over()函数来实现 例如: select t1.* from ( select t.*, ROW_NUMBER() over(partition t.id order by t.update_time desc) as rn from tab
mysql: SELECT * from (SELECT H_TEMPERATURE,TH_TIME FROM wenshidu WHERE TH_TIME <= STR_TO_DATE('2016-03-16 10:04:52','%Y-%m-%d %H:%i:%s') order by TH_TIME desc) as total limit 0,8; oracle: SELECT * from (SELECT H_HUMIDITY FROM HOME_MONITOR WHERE
1 前言 项目中排行榜刚好需要查数据库表然后给出编号,方案一,可以按条件查找出来,然后再按数组序号给编号,但是如果要查表出来直接看,就不太够用了:方案二,就是用代码帮忙编号.参考了网上一些代码,然后发现方法都有一个样的,然后这边只是作为记录使用,方便查找. 2 代码 SELECT province_id, province_name, gdp, (@i :=@i + 1) AS No FROM province, (SELECT @i := 0) AS it ORDER BY gdp DESC
mysql: SELECT * from (SELECT H_TEMPERATURE,TH_TIME FROM wenshidu WHERE TH_TIME <= STR_TO_DATE('2016-03-16 10:04:52','%Y-%m-%d %H:%i:%s') order by TH_TIME desc) as total limit 0,8; oracle: SELECT * from (SELECT H_HUMIDITY FROM HOME_MONITOR WHE
select * from (select row_number() over(partition by 以此字段为分组 order by 以此字段排序 desc rn from dual) where rn=1 --表示取第一个 如: id date 1 11/04 1 11/08 1 11/12 2 11/03 2 11/01 结果 id date 1 11/12 2 11/03 SQL select * from (select row_number(