【问题标题】:Select the first row of a column in a group of rows within another column在另一列中的一组行中选择一列的第一行
【发布时间】:2020-11-01 03:46:47
【问题描述】:

我必须在另一列的一组行中显示一列第一行的列表

基本查询:

SELECT * FROM Table_Example cxp

我的桌子

    |plan   |code   |des   |month   |
----+-------+-------+------+--------+
    | 150B  | Alpha | etc.a| 1      |
----+-------+-------+------+--------+
    | 150B  | Beta  | etc.b| 2      |
----+-------+-------+------+--------+
    | 2600C | Alpha | etc.a| 6      |
----+-------+-------+------+--------+
    | 2600C | Alpha | etc.a| 7      |
----+-------+-------+------+--------+
    | 2600C | Beta  | etc.b| 3      |
----+-------+-------+------+--------+
    | 2600C | Beta  | etc.b| 7      |
----+-------+-------+------+--------+
    | 2600C | Beta  | etc.b| 9      |
----+-------+-------+------+--------+
    | 2600C | Beta  | etc.b| 2      |
----+-------+-------+------+--------+
    | 2600C | Gama  | etc.c| 4      |
----+-------+-------+------+--------+
    | 2600C | Gama  | etc.c| 12     |
----+-------+-------+------+--------+
    | 2600C | Delta | etc.d| 22     |
----+-------+-------+------+--------+
    | 42F   | Alpha | etc.a| 15     |

预期结果

    |plan   |code   |des   |month   |
----+-------+-------+------+--------+
    | 2600C | Alpha | etc.a| 6      |
----+-------+-------+------+--------+
    | 2600C | Beta  | etc.b| 3      |
----+-------+-------+------+--------+
    | 2600C | Gama  | etc.g| 4      |
----+-------+-------+------+--------+
    | 2600C | Delta | etc.d| 22     |
----+-------+-------+------+--------+

成绩单结果:具有变量“@plan”,仅显示与该值匹配的行(例如:如果“@plan”为 2600C)并且在该组行中,仅显示每个不同“代码”值的第一行

我想做什么

SELECT * FROM Table_Example cxp WHERE plan = '2600C'

    |plan   |code   |des   |month   |
----+-------+-------+------+--------+
    | 2600C | Alpha | etc.a| 6      |
----+-------+-------+------+--------+
    | 2600C | Alpha | etc.a| 7      |
----+-------+-------+------+--------+
    | 2600C | Beta  | etc.b| 3      |
----+-------+-------+------+--------+
    | 2600C | Beta  | etc.b| 7      |
----+-------+-------+------+--------+
    | 2600C | Beta  | etc.b| 9      |
----+-------+-------+------+--------+
    | 2600C | Beta  | etc.b| 2      |
----+-------+-------+------+--------+
    | 2600C | Gama  | etc.c| 4      |
----+-------+-------+------+--------+
    | 2600C | Gama  | etc.c| 12     |
----+-------+-------+------+--------+
    | 2600C | Delta | etc.d| 22     |

但我不能只得到每个不同“代码”的第一行 我在考虑一个子查询,但我尝试了很多,但我无法得到正确的结果 或者它只返回“代码”列而不返回其他列,例如:

|code   |
+-------+
| Alpha |     
+-------+
| Beta  |       
+-------+
| Gama  |      
+-------+
| Delta |      
+-------+

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以使用row_number()

    select * from
    (
      SELECT *,row_number() over(partition by code order by month) as rnk
      FROM Table_Example cxp
      WHERE plan = '2600C'
    )A where rnk=1
    

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 2013-06-28
      • 1970-01-01
      • 2014-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多