微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据另一个值的总和来查询唯一值,同时将第三个值完全分组

如何解决根据另一个值的总和来查询唯一值,同时将第三个值完全分组

我认为这会做您想要的。

;WITH X1 
AS 
(
    SELECT SomeDateTime
           ,GroupID 
           ,ID
           ,ROW_NUMBER() OVER (PARTITION BY GroupID
                               ORDER BY SomeDateTime DESC
                               ) AS rn
    FROM X
)
SELECT SomeDateTime
       ,GroupID
       ,ID
FROM X1
WHERE rn = 1

解决方法

所以我知道这个问题不是一个新问题,但我正在努力解决这个问题,并了解解决此类情况的最佳方法。

假设我有一个假设表’X’,看起来像这样:

GroupID ID (identity)   SomeDateTime
--------------------------------------------
1       1000        1/1/01
1       1001        2/2/02
1       1002        3/3/03
2       1003        4/4/04
2       1004        5/5/05

我想查询它,以便结果集如下所示:

----------------------------------------
1       1002        3/3/03
2       1004        5/5/05

基本上,我想要的是SomeDateTime按我的GroupID列分组的MAX值。更重要的是,我不想按ID列分组,我只想知道与MAX对应的“
ID” SomeDateTime

我知道一个伪解决方案是:

;WITH X1 as (
    SELECT MAX(SomeDateTime) as SomeDateTime,GroupID 
    FROM X
    GROUP BY GroupID
)
SELECT X1.SomeDateTime,X1.GroupID,X2.ID
FROM X1
    INNER JOIN X as X2
        ON X.DateTime = X2.DateTime

但这不能解决DateTime可能不是唯一的事实。像这样加入DateTime似乎很草率。

另一个伪解决方案可能是:

SELECT X.GroupID,MAX(X.ID) as ID,MAX(X.SomeDateTime) as SomeDateTime
FROM X
GROUP BY X.GroupID

但是,不能保证ID实际上会匹配SomeDateTime来自该行的行。

第三个不太有用的选项可能是:

SELECT TOP 1 X.GroupID,X.ID,X.SomeDateTime
FROM X
WHERE X.GroupID = 1
ORDER BY X.SomeDateTime DESC

但是很明显,这仅适用于单个已知的GroupID。我希望能够在GroupID和/或上加入此结果集ID

有人知道任何明智的解决方案吗?窗口函数有什么好的用法?

谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。