抱歉标题模棱两可,不知道如何搜索,或者问这个问题。
假设我们有 TableA:
RowID FkId 排名日期 ID1 A 1 2013-3-1 ID2 A 2 2013-3-2 ID3 A 2 2013-3-3 ID4 B 3 2013-3-4 ID5 A 1 2013-3-5
我需要创建一个视图,它将为每个 FkId 返回 1 行。该行应该是最大排名和最大日期。因此,对于 FkId“A”,查询将返回“ID3”的行。
我能够通过使用子查询返回单行;首先我得到 MAX(Rank),然后加入另一个查询,该查询通过 FkId & Rank 获取 MAX(Date) 组。
选择表 A.* (Select FkId, MAX(Rank) AS Rank FROM TableA GROUP BY FkId) s1 INNER JOIN (Select FkId, Rank, MAX(Date) AS Date from TableA GROUP BY FkId,Rank) s2 ON s1.FkId = s2.FkId AND s1.Rank = s2.Rank 在 s2.FkId = TableA.FkId AND s2.Rank = TableA.Rank AND s2.Date = TableA.Date 上的内部连接 TableA
是否有更有效的查询可以达到相同的结果?感谢您的关注。
编辑:自上次回答以来添加了 ID5。如果我尝试正常的 MAX(rank),MAX(Date) GROUP BY FkId,那么对于“A”,我会得到 A;2;2013 年 3 月 5 日。此结果与 RowId 不匹配。