mysql - 获取数据组中的最小最大值

标签 mysql sql sql-server sql-server-2008 tsql

在 sql server 中我有一个表有超过千万条记录,比如

empnos  date
a1  18-Jul-13
a1  18-Jul-13
a1  18-Jul-13
a1  18-Jul-13
a2  18-Jul-13
a2  18-Jul-13
a2  18-Jul-13
a3  18-Jul-13
a1  19-Jul-13
a2  19-Jul-13
a3  19-Jul-13
a1  20-Jul-13
a2  20-Jul-13
a3  20-Jul-13

现在我想要分组的输出,每个组都有最小最大值,所以输出应该像下面的 1

EMPNO   DATE
A1  18-Jul-13
A1  20-Jul-13
A2  18-Jul-13
A2  20-Jul-13
A3  18-Jul-13
A3  20-Jul-13

最佳答案

Now there are some changes in requirement i want is in same table i want is top two max values

如果您使用的是 SQL-Server,则可以使用 ROW_NUMBERDENSE_RANK:

WITH CTE AS(
   SELECT empnos,  
          date,
          rn = row_number() over (partition by empnos order by date desc)
   FROM dbo.TableName
)
SELECT * FROM CTE WHERE RN <= 2

Demo

如果您还想要每个 empnos 的 Min-/Max 值,您可以使用 OVER 子句:

WITH CTE AS(
   SELECT empnos,  
          date,
          min = Min(date) over (partition by empnos),
          max = Max(date) over (partition by empnos),
          rn = row_number() over (partition by empnos order by date desc)
   FROM dbo.TableName
)
SELECT * FROM CTE WHERE RN <= 2

Demo

关于mysql - 获取数据组中的最小最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17802873/

相关文章:

java - 插入MySQL,但如果外键相同则覆盖

javascript - 尝试访问嵌套查询中的数组时未定义

mysql - 我正在使用 mybb,如何找到当前拥有最多读者的前 5 个线程?

sql - 如何在 SQL Server 中将字符串中每个单词的首字母大写

sql-server - 如何在 SQL 中对单列连接的日期时间字段求和

mysql - SQL Server 2008 R2 到 MySQL 迁移

php - 如果接收到的值为 null,则插入值

PHP OOP Mysql 查询

c# - 无法调试我的 Linq 查询?

sql - 如何使用 SQL Server 对 SQL Server 查询进行基准测试