天道酬勤,学无止境

SQL Sever中的窗口函数row_number()rank()dense_rank()

三个排序函数row_number()rank()dense_rank()
对于row_number()函数,他可以为表排序并返回一个序号

create table score
(学号 nvarchar(10) not null,
课程 nvarchar(10) not null,
成绩 nvarchar(10) not null)
insert into score
values('01','语文',90),
('01','数学',67),
('02','语文',82),
('02','数学',78),
('03','语文',65),
('03','数学',98),
('04','语文',82),
('04','数学',98)

比如最简单的给这个表排序,比如根据学号倒序

select *,row_number()over(order by 学号 desc) 序号 from score 

在这里插入图片描述
如图,row_number()over(order by 字段),则会根据你需要的字段进行排序,并给每一行一个编号,但是这些编号是连续的,比如学号为4号的有两行,但是row_number()函数并没有给他们相同的序号也就是排名,也就是说利用这个函数排序不存在相同名次的情况。如果数据的值相同,则先出现的数据排名更靠前。
row_number()函数也能分组进行排序,比如我想知道每门课程的排名情况。

select *,row_number()over(partition by 课程 order by 成绩 desc) 排名 from score 

在这里插入图片描述
row_number() over(partition by 字段1 order by 字段2)可以根据字段1先分组然后再组内排名。同样,出现同分的情况不会有相同名次。

对于rank()函数有着类似的用法,也有rank()over(order by 字段) 和rank()() over(partition by 字段1 order by 字段2)两种用法,不同的是rank函数编号的方式不一样。
同样我想知道每门课程的排名情况。

select *,rank()over(partition by 课程 order by 成绩 desc) 排名 from score

在这里插入图片描述
看出区别了吗,rank函数会出现同名次的情况,比如两个并列第一名,就没有了第二名。

对于dense_rank()函数也是一样。

select *,desn_rank()over(partition by 课程 order by 成绩 desc) 排名 from score

在这里插入图片描述
同样,dense_rank()也会出现同名次的情况,但是依然会接着上一个数连续下去,比如两个并列第一不会挤掉第二名。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • oracle中的RANK()和DENSE_RANK()函数有什么区别?(What's the difference between RANK() and DENSE_RANK() functions in oracle?)
    问题 RANK()和DENSE_RANK()函数之间有什么区别? 如何在下面的emptbl表中找出第n个薪水? DEPTNO EMPNAME SAL ------------------------------ 10 rrr 10000.00 11 nnn 20000.00 11 mmm 5000.00 12 kkk 30000.00 10 fff 40000.00 10 ddd 40000.00 10 bbb 50000.00 10 ccc 50000.00 如果表中的数据为nulls ,如果我想找出nth薪水会怎样? 回答1 RANK为您提供有序分区内的排名。 领带被分配相同的等级,而下一个等级被跳过。 因此,如果您在第2级有3个项目,则列出的下一个级别将是第5级。 DENSE_RANK再次为您提供了有序分区中的排名,但是这些排名是连续的。 如果存在包含多个项目的等级,则不会跳过任何等级。 至于空值,则取决于ORDER BY子句。 这是一个简单的测试脚本,您可以使用它来查看会发生什么: with q as ( select 10 deptno, 'rrr' empname, 10000.00 sal from dual union all select 11, 'nnn', 20000.00 from dual union all select 11, 'mmm', 5000
  • Hive--sql中的窗口函数
    文章目录 1. 清楚sql的关键字顺序和执行顺序2. 在Hive命令行中可以对函数功能进行查看3. 窗口函数3.1 rank( ),dens_rank( ),row_number()3.2 sum( ),avg( )等 4. 参考 今天对Hive–sql中的窗口函数及常用的一些内容做一个简单的总结。 1. 清楚sql的关键字顺序和执行顺序 关键字顺序 select … from … where … group by … having … order by … limit … 执行顺序 from where group by having select order by limit group by 的底层是distinct 在使用group by时需要注意:select出来的必须列在groupby中,或者聚合函数中 2. 在Hive命令行中可以对函数功能进行查看 show functions; //查看自带的所有的内置函数 desc function upper; //查看具体的某个函数的用法 desc function extended upper; //带有具体案例 3. 窗口函数 窗口函数大体可以分为以下两种 1.能够作为窗口函数的聚合函数(sum,avg,count,max,min) 2.rank( ),dense_rank( ),row_number( )等专用窗口函数。
  • SQL RANK()与ROW_NUMBER()(SQL RANK() versus ROW_NUMBER())
    问题 我对两者之间的差异感到困惑。 运行以下SQL将为我提供两个重要的结果集。 有人可以解释这些差异吗? SELECT ID, [Description], RANK() OVER(PARTITION BY StyleID ORDER BY ID) as 'Rank' FROM SubStyle SELECT ID, [Description], ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) as 'RowNumber' FROM SubStyle 回答1 ROW_NUMBER:为从1开始的每一行返回一个唯一的数字。对于具有重复值的行,数字是任意分配的。 等级:为每行从1开始分配一个唯一的数字(具有重复值的行除外),在这种情况下,将分配相同的等级,并且在每个重复等级的序列中会出现一个间隔。 回答2 仅当您在分区中具有特定订购值的联系时,您才会看到差异。 在这种情况下, RANK和DENSE_RANK是确定性的,对于排序和分区列具有相同值的所有行最终都将得到相等的结果,而ROW_NUMBER将任意(非确定性)将递增结果分配给绑定的行。 示例:(所有行都具有相同的StyleID因此它们位于同一分区中,并且在该分区中,按照ID排序时,前3行被捆绑在一起) WITH T(StyleID, ID) AS (SELECT 1,1
  • ClickHouse 开窗函数(row_number()、rank()等)
    正宗的ClickHouse开窗函数来袭 在今年2月6号线上举行的 ClickHouse China Spring Meetup 中,朵夫为我们带来了 ClickHouse Features 2021 的分享,其中有非常多强大的新特性,幻灯片的下载地址如下: https://presentations.clickhouse.tech/meetup50/new_features/ 在众多的新特性中,我对开窗函数、自定义UDF、ZooKeeper优化等几项特别感兴趣,后续我也打算分别用几篇文章来展开说明。 现在 ClickHouse 提供了正宗的实现,功能上使用起来真是比先前的奇技淫巧简单太多了。 首先准备测试表: CREATE TABLE test_data engine = Memory AS WITH( SELECT ['A','A','A','A','B','B','B','B','B','A','59','90','80','80','65','75','78','88','99','70'])AS dict SELECT dict[number%10+1] AS id, dict[number+11] AS val FROM system.numbers LIMIT 10 在此之前,如果要实现 row_number 和 dense_rank 的分组查询
  • MySQL8.0新特性学习笔记(二):窗口函数
    目录 一,简介 二,窗口函数的两种写法 三,窗口表达式语法 1,PARTITION BY子句 2,ORDER BY子句 3,frame子句 四,窗口函数介绍 1,序号函数:row_number(),rank(),dense_rank() 2,分布函数:percent_rank() / cume_dist() 3,前后函数:lead() / lag() 4,头尾函数:first_val() / last_val() 5,其他函数:nth_value() / nfile() 6,原生聚合函数 MySQL8.0引入的窗口函数,可以比较方便的实现一些分析和统计功能,这些功能不用窗口函数也能实现,不过实现的sql可能会比较复杂。 一,简介 什么是窗口函数 窗口函数引入的其实不只是几个函数,而是一套完整的语法,窗口函数是此语法中的一部分。 语法: 窗口函数 over 窗口表达式。 over是窗口函数语法的关键字。 从语法上来看,窗口函数的使用实际上分为两部分:窗口函数和窗口。 窗口函数在sql中往往使用在查询结果中,返回一列值,就像查询一个字段一样。 窗口 从数据结构上来看,要使用窗口函数,首先我们要有一个窗口,所谓窗口,个人理解是一个数据集,数据集的内容可以类比group by分组之后的一组数据,只不过在使用了窗口函数的sql中,每一行记录都有一个自己的窗口,每行记录所对应的窗口
  • 天池龙珠计划SQL_Task5
    Task05:窗口函数等 本笔记为阿里云天池龙珠计划SQL训练营的学习内容,链接为:https://tianchi.aliyun.com/specials/promotion/aicampsql; 5.1 窗口函数 5.1.1 窗口函数概念及基本的使用方法 窗口函数也称为OLAP函数。OLAP 是OnLine AnalyticalProcessing 的简称,意思是对数据库数据进行实时分析处理。 常规的SELECT语句都是对整张表进行查询,而窗口函数可以让我们有选择的去某一部分数据进行汇总、计算和排序。 举例: 我们要得到一个年级所有班级所有学生的平均分,按照传统的写法,我们肯定是通过AVG聚合函数来实现求平均分。这样带来的”坏处“是我们不能轻松地返回基础行的列(班级,学生等列),而只能得到聚合列。因为聚合函数的要点就是对一组值进行聚合,以GROUP BY 查询作为操作的上下文,由于GROUP BY 操作对数据进行分组后,查询为每个组只返回一行数据,因此,要限制所有表达式为每个组只返回一个值。而通过窗口函数,基础列和聚合列的查询都轻而易举。 <窗口函数> OVER ([PARTITION BY <列名>] ORDER BY <排序用列名>) [ ]中的内容可以省略。窗口函数最关键的是搞明白关键字PARTITON BY和ORDER BY*****的作用。 PARTITON
  • 数据库刷题笔记1
    目录 简化等值查询mysql中limit和offset的用法LIMIT 分页查询In 与 exists 的区别IN 语句:只执行一次EXISTS语句:执行student.length次区别及应用场景not in 和not exists 日期函数格式转换开窗函数函数简介语法简介 聚合函数排名函数 简化等值查询 多表连接查询,且去掉重复列,使用 USING() select * from school left join course USING (courseid) #相当于 select * from school left join course on school.courseid=course.courseid; mysql中limit和offset的用法 mysql里分页一般用limit来实现,例如: 1、select* from user limit 3; 表示直接取前三条数据 2、select * from user limit 1,3; 表示取2,3,4三条条数据 3、select * from user limit 3 offset 1; 表示取2,3,4三条条数据 解释: 1、当 limit后面跟一个参数的时候,该参数表示要取的数据的数量 例如 select* from user limit 3; 表示直接取前三条数据 2、当limit后面跟两个参数的时候
  • Hive窗口函数Over partition by
    - 目录 1、聚合函数+over2、partition by子句3、order by子句4、★window子句(里面包含) - PRECEDING:往前 - FOLLOWING:往后 - CURRENT ROW:当前行 - UNBOUNDED:起点5、★窗口函数中的序列函数:包含NTILE(n),row_number、rank、dense_rank 简介 本文主要介绍hive中的窗口函数。hive中的窗口函数和sql中的窗口函数相类似,都是用来做一些数据分析类的工作,一般用于olap分析 注意:OVER():指定分析函数工作的数据窗口大小,决定了聚合函数的范围,这个数据窗口大小可能会随着行的变而变化,同时可以使用以下进行限定范围。 概念 我们都知道在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。 但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数。 在深入研究Over字句之前,一定要注意:在SQL处理中,窗口函数都是最后一步执行,而且仅位于Order by字句之前. 数据准备 我们准备一张order表,字段分别为name、orderdate、cost 数据内容如下: jack,2015-01-01,10 tony,2015-01-02
  • SQL开窗函数(窗口函数)详解
    一、什么是开窗函数 开窗函数/分析函数:over() 开窗函数也叫分析函数,有两类:一类是聚合开窗函数,一类是排序开窗函数。 开窗函数的调用格式为: 函数名(列名) OVER(partition by 列名 order by列名) 。 如果你没听说过开窗函数,看到上面开窗函数的调用方法,你可能还会有些疑惑。但只要你了解聚合函数,那么理解开窗函数就非常容易了。 我们知道聚合函数对一组值执行计算并返回单一的值,如sum(),count(),max(),min(), avg()等,这些函数常与group by子句连用。除了 COUNT 以外,聚合函数忽略空值。 但有时候一组数据只返回一组值是不能满足需求的,如我们经常想知道各个地区的前几名、各个班或各个学科的前几名。这时候需要每一组返回多个值。用开窗函数解决这类问题非常方便。 开窗函数和聚合函数的区别: (1)SQL 标准允许将所有聚合函数用作开窗函数,用OVER 关键字区分开窗函数和聚合函数。 (2)聚合函数每组只返回一个值,开窗函数每组可返回多个值。 开窗函数与聚合函数一样,也是对行集组进行聚合计算,但是它不像普通聚合函数那样每组只返回一个值,开窗函数可以为每组返回多个值,因为开窗函数所执行聚合计算的行集组是窗口。 注:常见主流数据库目前都支持开窗函数,但mysql数据库目前还不支持(8.0后已支持)。
  • SQL窗口函数踩坑笔记
    谁也不能否认,编写SQL语句是一个数据分析师的重要(甚至是最重要)的技能之一,而Python/R之类,有时候承担的只是胶水语言的功能(比方说最近有个出Excel日报的工作,Python就很好地替代了大量人工劳动)。SQL是数据分析的生产工具,因为企业级的生产数据几乎都存放在数据库或数据仓库中(企业中一般是在线存储的),而对它们进行操作的几乎都属于SQL的某个分支。但SQL这个东西,初学容易、入门简单、精通困难,实在是事业成功的拦路虎。 我这么说的理由有如下几点: 各种数据库支持的SQL语句有区别,标准不统一 个人难以建立复杂的应用场景, 导致SQL技能在实习和工作中才能提升 一些SQL技巧的使用方法难以使用小型可重复性例子进行展示 SQL非编程语言,一些编程语言几行代码能解决的任务SQL往往需要更长的代码 首先,SQL的分支实在太多了,而同一种SQL又因为不同的版本而不同。比如MySQL 8.0之前的版本是没有窗口函数的。第二点的意思是,如果你没有在公司的数据分析岗位写过SQL的话,接触到工业级应用场景的机会几乎为0。因为自己本地能搭建的数据库几乎都是玩具数据,关联逻辑简单、数据量小。而LeeCode等平台的SQL面试题类的代码往往更强调准确性,真实的应用场景则往往会非常多地考虑性能要求。第三点,不同于Python/R,如果需要复现某种SQL技巧,往往需要自己造数据
  • SQL Server:如何模仿oracle保持density_rank查询?(SQL Server: how to imitate oracle keep dense_rank query?)
    问题 我有一个Oracle查询 select max(m.id), m.someId keep (DENSE_RANK FIRST ORDER BY m.UpdateDate desc) from MyTable m groupBy m.someId 对于这样的数据: id UpdateDate someId 1 20-01-2012 10 2 20-01-2012 10 3 01-01-2012 10 4 10-02-2012 20 5 01-02-2012 20 6 01-04-2012 30 会完全返回我这个: 2 10 4 20 6 30 因此,对于每个someId,它都会搜索最新的updateDate并返回适当的id 。 (如果最新日期有多个ID,则采用最新ID)。 但是对于SQL Server,此查询将以相同的方式工作吗? 我的意思是这种构造keep (dense_rank first order by ..) 回答1 我认为您的特定查询不会运行SQL Server。 但是您可以通过执行以下操作获得相同的结果: SELECT id, SomeId FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY someId ORDER BY UpdateDate DESC, id DESC) Corr FROM MyTable) A
  • 【数据库与SQL】力扣刷题SQL篇(1)
    力扣SQL题目整理 文章目录 1.组合两个表2.第二高的薪水3.第N高的薪水4.分数排名5.连续出现的数字SQL中的连续问题SQL解决连续n天登录问题(时间与排序相减)sql连续登录3天以上用户_SQL窗口函数轻松解决连续N天购买用户问题 1.组合两个表 select p.FirstName, p.LastName, a.City, a.State from Person as P left join Address as a on p.PersonId = a.PersonId 多表连接 2.第二高的薪水 方法一 第二高,小于最大值,筛选出来后在求最大值 select max(Salary) as SecondHighestSalary from Employee where Salary <( select max(Salary) from Employee ); 方法二 使用关键字distinct,order by,limit,ifnull select ifnull( (select distinct Salary from Employee order by Salary desc limit 1,1),null ) as SecondHighestSalary limit 和 limit offset区别 下面是几种SQL语句limit使用方法: 1、select *
  • 开窗函数的意义与用法
    开窗函数——排序函数 开窗函数与其他函数的区别是,它不是关联其他表查询,而是在一张表内根据我们的想法自定义的规则分组后对我们组内的数据进行检索和计算。我们自定义的规则所分的组,就如同整张表的一个个小窗口,因此我们开出一个个小窗口并对这些小窗口进行的操作就叫做开窗函数。 开窗函数分为排序函数和聚合函数。 一、排序函数: 1.三个排序函数 句型:row_number()的排序函数 order_func OVER([PARTITION BY expression] ORDER BY clase) 其中,order_func是指排序函数,包括: row_number(),rank(),dense_rank(),ntile(); 他们会为每一行返回一个序值。 PARTITION BY 是我们自定义的分组策略,如果不用,该函数会把其余select 语句包括where、having、group by的运行结果做为窗口进行排序;ORDER BY 是排序的方法,即每个窗口内根据哪个字段排序,不能缺省。 例如:我们需要对一个包含4个班级的16个同学的成绩表进行以班为单位的排序,我们可以这样排序: select st_name ,st_class ,st_score ,row_number() over(partition by st_class order by score) as '名次' from
  • mysql开窗函数排序_SQL Server进阶(八)查询——开窗函数、四大排名函数、透视数据、逆透视数据...
    概述 ROW_NUMBER() OVER(PARTITION BY CustId ORDER BY ID DESC) https://www.jb51.net/article/75533.htm 开窗函数 SELECTempid, ordermonth, val,SUM(val) OVER(PARTITION BYempidORDER BYordermonth ROWSBETWEENUNBOUNDED PRECEDINGAND CURRENT ROW) ASrunvalFROM Sales.EmpOrders; 四大排名函数(ROW_NUMBER、RANK、DENSE_RANK、NTILE) ROW_NUMBER()的用途的非常广泛,排序最好用他,一般可以用来实现web程序的分页,他会为查询出来的每一行记录生成一个序号,依次排序且不会重复,注意使用row_number函数时必须要用over子句选择对某一列进行排序才能生成序号。 rownum列就是row_number函数生成的序号列,其基本原理是先使用over子句中的排序语句对记录进行排序,然后按照这个顺序生成序号。over子句中的order by子句与SQL语句中的order by子句没有任何关系,这两处的order by 可以完全不同。 dense_rank函数的功能与rank函数类似,dense
  • hive-5(窗口函数)
    hive-5 聚合函数partition byorder byntilerank,dense_rank,row_numberPRECEDING、 FOLLOWING、CURRENT ROW、UNBOUNDEDpartition by与distribute by、order by与sort by的区别 案例数据: name|dept_num|emp_id|salary|type|start_date Michael|1000|99|5000|full|2014-01-29 Will|1000|100|4000|full|2013-10-02 Wendy|1000|101|4000|part|2014-10-02 Steven|1000|102|6400|part|2012-11-03 Lucy|1000|103|5500|full|2010-01-03 Lily|1001|104|5000|part|2014-11-29 Jess|1001|105|6000|part|2014-12-02 Mike|1001|106|6400|part|2013-11-03 Wei|1002|107|7000|part|2010-04-03 Yun|1002|108|5500|full|2014-01-29 Richard|1002|109|8000|full|2013-09-01 聚合函数 需求1
  • sql查询与Row_Number不同(sql query distinct with Row_Number)
    问题 我正在与sql的distinct关键字作斗争。 我只想在列中显示唯一( distinct )值的所有行号,所以我尝试了: SELECT distinct id, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM table where fid = 64 但是下面的代码给了我distinct价值: SELECT distinct id FROM table where fid = 64 但是当用Row_Number尝试时。 那就行不通了。 回答1 用这个: SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM (SELECT DISTINCT id FROM table WHERE fid = 64) Base 并将查询的“输出”作为另一个查询的“输入”。 使用CTE: ; WITH Base AS ( SELECT DISTINCT id FROM table WHERE fid = 64 ) SELECT *, ROW_NUMBER() OVER (ORDER BY id) AS RowNum FROM Base 这两个查询应该是等效的。 从技术上讲,您可以 SELECT DISTINCT id, ROW_NUMBER() OVER (PARTITION BY id
  • 窗口功能可计算不同的记录(Window functions to count distinct records)
    问题 下面的查询基于一个复杂的视图,并且该视图可以按我希望的方式工作(我将不包括该视图,因为我认为它不会对当前的问题有所帮助)。 我无法drugCountsinFamilies是drugCountsinFamilies列。 我需要它向我显示每个毒品家族的distinct drugName的数量。 您可以从第一个屏幕截图中看到三行不同的H3A行。 H3A的drugCountsInFamilies应该为3(有3种不同的H3A药物。) 您可以从第二个屏幕截图中看到,正在发生的是第一个屏幕drugCountsInFamilies中的drugCountsInFamilies正在捕获列出药物名称的行数。 以下是我的问题,对不正确部分的评论 select distinct rx.patid ,d2.fillDate ,d2.scriptEndDate ,rx.drugName ,rx.drugClass --the line directly below is the one that I can't figure out why it's wrong ,COUNT(rx.drugClass) over(partition by rx.patid,rx.drugclass,rx.drugname) as drugCountsInFamilies from ( select ROW_NUMBER(
  • 窗口函数
    作者:卖山楂啦prss 主页:https://blog.csdn.net/qq_42374697/article/details/113968420 SQL 窗口函数速查表 文章目录 1 什么是窗口函数? 1.1 为什么叫“窗口”函数?1.2 窗口函数特点1.3 窗口函数应用场景1.4 执行顺序 2 窗口函数语法 (1)partition by 分组(2)order by 排序(3)frame_clause 窗口大小 3 常用的窗口函数 3.1 聚合窗口函数: 3.1.1 案例 3.2 排名窗口函数(专用窗口函数) 3.2.1 案例 3.3 取值窗口函数 1 什么是窗口函数? 又叫OLAP函数,Online Anallytical Processing,联机分析处理,可以对数据库数据进行实时分析处理。窗口代表范围。 窗口函数与聚合函数不同,窗口函数对于每个组返回多行,而聚合函数对于每个组只返回一行 引用图片:窗口函数概述 1.1 为什么叫“窗口”函数? 因为分组后的结果称为“窗口”,表示“范围“。 对于窗口函数,每个分组可以看作是一个窗口,分组内的每一行根据其所在分组内的行数据进行函数计算,获取计算结果,作为该行的窗口函数结果值。 1.2 窗口函数特点 (1)同时具有分组和排序的功能 (2)不减少原表的行数 (3)窗口函数只能出现在 SELECT 列表和 ORDER BY 子句中
  • Hive常用函数之开窗函数
    开窗函数定义 普通的聚合函数聚合的行集是组,开窗函数聚合的行集是窗口。因此,普通的聚合函数每组(Group by)只返回一个值,而开窗函数则可为窗口中的每行都返回一个值。简单理解,就是对查询的结果多出一列,这一列可以是聚合值,也可以是排序值。 开窗函数一般分为两类,聚合开窗函数和排序开窗函数。 基础结构:分析函数(如:sum(),max(),row_number()...) + 窗口子句(over函数)over函数写法:over(partition by groupColumn order by orderColumn) 先根据groupColumn字段分区,相同的orderColumn分为一区,每个分区内根据createtime字段排序(默认升序) 相关函数说明: OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化CURRENT ROW:当前行PRECEDING n:往前n行数据FOLLOWING n:往后n行数据UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING表示到后面的终点LAG(col,n):往前第n行数据LEAD(col,n):往后第n行数据NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行
  • 每天如何选择1条以上的记录?(How to select more than 1 record per day?)
    问题 这是一个postgresql问题。 PostgreSQL 8.3.3 on i686-redhat-linux-gnu, compiled by GCC gcc (GCC) 3.4.6 20060404 (Red Hat 3.4.6-9). 该表如下所示: date_time other_column 2012-11-01 00:00:00 ... 2012-11-02 01:00:00 ... 2012-11-02 02:00:00 ... 2012-11-02 03:00:00 ... 2012-11-02 04:00:00 ... 2012-11-03 05:00:00 ... 2012-11-03 06:00:00 ... 2012-11-05 00:00:00 ... 2012-11-07 00:00:00 ... 2012-11-07 00:00:00 ... ... 我想从特定日期范围内每天最多选择3条记录。 例如,我想从2012-11-02到2012-11-05最多选择3条记录。 expected result将是: date_time other_column 2012-11-02 01:00:00 ... 2012-11-02 02:00:00 ... 2012-11-02 03:00:00 ... 2012-11-03 05:00:00 ... 2012