以下查询返回包含列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
列派生的较大值。
我不确定如何使用多个连接实现此级别的分组,这是我的查询
答案 0 :(得分:2)
您可以像这样使用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语法,请参阅: