以下查询返回 FM.FaultIDMSTR
列中包含多个值的数据,我想消除重复项并仅采用一个值并沿该值显示其他数据。
Select TOP 1000
FH.AtmKey,F.FAULTDESC,FH.FAULTSTARTTIME,FH.FAULTENDTIME,FM.FaultIDMSTR
From FAULTS_HISTORY FH, FAULTDEFS F, FAULTMAP FM
where FH.FaultID = F.FAULTID
and F.FAULTID = FM.FaultID
and FH.AtmKey in ('11487676154140993')
消除重复项的条件将基于从FH.FAULTSTARTTIME
列派生的较大值。
我不确定如何通过多个连接实现这种级别的分组,这是我的查询
最佳答案
您可以使用ranking function ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ...
像这样:
WITH CTE
AS
(
Select TOP 1000
FH.AtmKey,
F.FAULTDESC,
FH.FAULTSTARTTIME,
FH.FAULTENDTIME,
FM.FaultIDMSTR,
ROW_NUMBER() OVER(PARTITION BY FM.FaultIDMSTR
ORDER BY FH.FAULTSTARTTIME DESC) AS RN
From FAULTS_HISTORY FH
INNER JOIN FAULTDEFS F ON FH.FaultID = F.FAULTID
INNER JOIN FAULTMAP FM ON F.FAULTID = FM.FaultID
where FH.AtmKey in ('11487676154140993')
)
SELECT
AtmKey,
AULTDESC,
FAULTSTARTTIME,
FAULTENDTIME,
FaultIDMSTR
FROM CTE
WHERE RN = 1;
这将为您提供最大值为 FH.FAULTSTARTTIME
的行对于每个 FM.FaultIDMSTR
,如果您想按另一列进行分组,请将其放在 PARTITION BY
中专栏。
请注意:尽量避免使用旧的 JOIN
语法,并使用 ANSI-92 语法,请参阅:
关于sql-server-2008 - 跨多个联接进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18713068/