首页 > 解决方案 > 需要从sql中的每个组中选择1行

问题描述

我正在尝试执行此查询。这就是我所拥有的。

我的表是:表

QId    InternalId      type.     priority       userid
100       100              1            0                X101
100       100              1            1                X102
100       100              2            0                X103
100       100              2            0                X104
100       100              2            0                X105
100       100              3            0                X106
100       100              3            0                X107
101       101              2            1                X114
101       101              2            0                X115
101       101              3            0                X116
101       101              3            0                X117

对于 QId 和 InternalId,我们有类型 1,2,3。对于每个基于组的类型,我需要 1 行。这里的条件是如果优先级为 1,那么我们需要获取该记录。如果没有设置优先级需要先记录。

我需要如下表的结果

QId    InternalId      type.     priority       userid
100       100              1            1                X102
100       100              2            0                X103
100       100              3            0                x106
101       101              2            1                X114
101       101              3            0                X116

你能帮我解决这个问题吗

标签: sqlsql-server

解决方案


只需使用row_number()

select t.*
from (select t.*,
             row_number() over (partition by QId, InternalId, type order by (select null)) as seqnum
      from t
     ) t
where seqnum = 1;

推荐阅读