[英]Sql Group By Max Value in one column
我一整天都在拔头发,有人可以帮我。 我认为它可能很简单,但我不能完全得到我想要的东西。
表中的数据如下所示
CallId ProblemDescription CurrentAction CurrentEngineer EventNumber
CON-00002 Respond to Call 0
WHS-00001 Respond to Call 0
WHS-00002 Respond to Call 0
WHS-00003 Respond to Call 0
WHS-00003 Fix Problem 1
WHS-00003 Problem Fixed 2
我想要做的是显示具有最大事件编号的CallId的所有列。 即
CallId ProblemDescription CurrentAction CurrentEngineer EventNumber
CON-00002 Respond to Call 0
WHS-00001 Respond to Call 0
WHS-00002 Respond to Call 0
WHS-00003 Problem Fixed 2
但是,我无法弄清楚如何做到这一点。
目前我正在使用
Select CallId, MAX(ProblemDescription), MAX(CurrentAction), MAX(CurrentEngineer),
MAX(EventNumber) FROM [Table] GROUP BY CallId
这显然如何为每个coloumn单独返回最大值。 因此,在上面的情况下,CurrentAction列显示Respond to Call
未Respond to Call
任何人都可以告诉我如何做到这一点???
谢谢
我假设您正在寻找DENSE_RANK
:
WITH CTE AS
(
SELECT
CallId,
ProblemDescription,
CurrentAction,
CurrentEngineer,
EventNumber,
Rank = DENSE_RANK() OVER (PARTITION BY CallId ORDER BY EventNumber DESC)
FROM dbo.TableName
)
SELECT
CallId, ProblemDescription, CurrentAction, CurrentEngineer, EventNumber
FROM
CTE
WHERE
RANK = 1
如果每个CallId
只需要一行,即使有多个具有相同的最大EventNumber
使用ROW_NUMBER
。
你想使用row_number():
select CallId, ProblemDescription, CurrentAction, CurrentEngineer, EventNumber
from (select t.*,
ROW_NUMBER() over (partition by callId order by eventnumber desc) as seqnum
from t
) t
where seqnum = 1
使用此代码。 *仅在事件编号列上使用Max聚合。
SELECT CallID, Problem_Description, Current_Action, Current_Engineer, MAX( Event_Number ) FROM test.data GROUP BY CallID;
这可能对你有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.