sql - 通过查询获取组中每条记录的MAX值

标签 sql sql-server

我有一个 SQL 查询,如下所示:

 select fldCustomer, fldTerminal, COUNT(fldbill)
 from tblDataBills
 group by fldCustomer, fldTerminal
 order by fldCustomer 

结果如下:

 fldCustomer    fldTerminal (number of bills)
 0  1   19086
 0  2   10
 0  5   236
 1  1   472
 1  5   3
 1  500 19
 2  1   292
 2  500 22

我怎样才能获得每个客户的最大数量,以便得到类似的结果

 0 1 19086
 1 1 472
 2 1 292

提前致谢!

最佳答案

通过 row_number() 使用子查询:

select fldCustomer, fldTerminal, cnt
from (select fldCustomer, fldTerminal, COUNT(*) as cnt,
             row_number() over (partition by fldCustomer order by count(*) desc) as seqnum
      from tblDataBills
      group by fldCustomer, fldTerminal
     ) db
where seqnum = 1
order by fldCustomer ;

请注意,如果出现平局,这将任意返回其中一行。如果您想要所有这些,请使用 rank()dense_rank()

关于sql - 通过查询获取组中每条记录的MAX值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48609300/

相关文章:

sql - 如何编写使用时间损耗的查询(例如 1 天内、2 天内)?

mysql - 内连接应该是可选的

sql - 在以某种方式制定查询输出方面需要帮助

sql - 使用 Microsoft SQL Server Migration Assistant for Access 将 Access 数据库转换为 MSSQL 数据库

sql - H2 月份的最后一天

sql - 使用两列创建索引和在两列上创建单独索引之间的区别

sql - 从行中获取逗号分隔的字符串

sql - 了解条件 SQL 连接,请参阅说明

sql - 按列精确单词或相同的前两个单词或相同的前三个单词分组

sql - SQL 中长时间运行更新期间的并发性