【问题标题】:How to retrieve the rows (with maximum value in a field) having a another common field?如何检索具有另一个公共字段的行(字段中具有最大值)?
【发布时间】:2011-02-14 08:04:56
【问题描述】:

我有一张桌子;让它叫table1;具有以下字段和数据

alt text http://img228.imageshack.us/img228/3827/45939084.png

对于在Field2 中具有相同值的每组记录,我需要一个查询来返回Field3 中具有最大值的记录。以便查询返回:

alt text http://img87.imageshack.us/img87/62/48847706.png

如何使用 SQL 查询来做到这一点?

【问题讨论】:

    标签: sql sql-server sql-server-2005 select


    【解决方案1】:

    这个:

    WITH    q AS
            (
            SELECT  *, ROW_NUMBER() OVER (PARTITION BY field2 ORDER BY field3 DESC) AS rn
            FROM    table1
            )
    SELECT  *
    FROM    q
    WHERE   rn = 1
    

    或者这个:

    SELECT  q.*
    FROM    (
            SELECT  DISTINCT field2
            FROM    table1
            ) qo
    CROSS APPLY
            (
            SELECT  TOP 1 *
            FROM    table1 t
            WHERE   t.field2 = qo.field2
            ORDER BY
                    t.field3 DESC
            ) q
    

    根据field2 基数,第一个或第二个查询可能更有效。

    查看这篇文章了解更多详情:

    【讨论】:

    • 谢谢夸斯诺伊。第一个返回一个额外的“rn”列,请编辑如下:...... WITH q AS (SELECT *, ROW_NUMBER() OVER (PARTITION BY field2 ORDER BY field3 DESC) AS rn FROM table1) SELECT Field1 , Field2, Field3, Field4 FROM q WHERE rn = 1 ......但第二个很棒,文章也很棒。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    相关资源
    最近更新 更多