mssql 2005查询 请问我要实现分组获取最大值,怎么写sql查询指令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mssql 2005查询 请问我要实现分组获取最大值,怎么写sql查询指令相关的知识,希望对你有一定的参考价值。

1、我需要所有字段
2、按型号分组
3、取数量最大的那条记录
4、数量有多条记录相同时,只取1条

select tb.型号,品牌,批号,数量 from tb
join
(select 型号,max(数量)as 最大数量 from tb group by 型号) A
on
(tb.型号=A.型号 AND 数量=最大数量)追问

已经解决,你的方法我会用,是不行的.还是谢谢,分给你了

参考技术A 分组查询时,只能出现分组字段和集函数.

每组最大 n 个 MSSQL

【中文标题】每组最大 n 个 MSSQL【英文标题】:Greatest-n per group MSSQL 【发布时间】:2017-03-02 12:01:06 【问题描述】:

我使用的是 SQL-server 2008

我的桌子是这样的:

max_period  Employee ID Preferred Name
2016-10-19 00:00:00.000 16317   James Hello
2015-10-31 00:00:00.000 16317   Jimmy Hello

我试图仅通过 Employee_ID 获取 max_period 最大的名称

输出如下所示:

max_period  Employee ID Preferred Name
2016-10-19 00:00:00.000 16317   James Hello

有人可以帮我解决这个问题吗?这似乎很容易,但首先让我很头疼。

【问题讨论】:

在派生表/CTE 中使用RANKROW_NUMBER() OVER (PARTITION BY Employee_ID ORDER BY max_period DESC) as r,然后过滤WHERE r = 1 【参考方案1】:
;with cte
AS
(
select max_period  ,EmployeeID , PreferredName, ROW_NUMBER() OVER (PARTITION BY Employee_ID ORDER BY max_period DESC) as RN From Table1
)
SELECT * from cte WHERE RN = 1

您也可以使用 GROUP BY 来做到这一点

select MAX(max_period), EmployeeID , PreferredName FROM Table1 GROUP BY EmployeeID , PreferredName 

【讨论】:

【参考方案2】:

你可以尝试使用 row_number() over()

;with cte as (
  select *, RowN = row_number() over (order by max_Period desc) from YourTable
 ) select * from cte where RowN = 1

【讨论】:

【参考方案3】:
SELECT *
  FROM (SELECT max(period) as max_period, [Employee ID], [Preferred Name],
           ROW_NUMBER() OVER (PARTITION BY [Employee ID] ORDER BY period DESC)     rank
          FROM STG.tbl_HR_BI_feed
      where [Employee ID] = '16317'
      group by [Employee ID], [Preferred Name], period) a
 WHERE a.rank = 1 

【讨论】:

以上是关于mssql 2005查询 请问我要实现分组获取最大值,怎么写sql查询指令的主要内容,如果未能解决你的问题,请参考以下文章

MSSQL 2005 存储过程中最大的文本可用变量?

如何在 MSSQL 2005 中创建递归查询?

mssql查询命令

SQL对查询结果进行分组

MSSQL 2005 如和查询所有Table使用的空间

MSSQL 30-60-90-120 天查询分组