通过多个联接进行分组

用户2385057

Query之后向我返回具有column多个值的数据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')

在此处输入图片说明

消除重复项的条件将基于column得出的较大值FH.FAULTSTARTTIME

我不确定如何通过适当的多个联接来实现这种分组级别,这是我的查询

马哈茂德·加马尔(Mahmoud Gamal)

您可以像这样使用排名功能 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语法,请参见:

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章