需要从sql中的每个组中选择1行

时间:2019-02-13 13:15:53

标签: sql sql-server

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

我的桌子是:桌子

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

你能帮我这个忙吗

4 个答案:

答案 0 :(得分:1)

只需使用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;

答案 1 :(得分:1)

您可以尝试使用row_number()

select * from
(
select *, row_number() over(partition by qid, internalid, type order by priority desc) as rn
from tablename
)A where rn=1

答案 2 :(得分:0)

使用row_number()窗口功能

select t.* from (select *,row_number()over(partition by QId,InternalId,type order by case when priority=1 then 1 else 2 end) rn
) where t.rn=1

答案 3 :(得分:0)

另一种方法可以是WITH TIES,如下所示。

select top 1 with ties *
from @table
order by row_number() over (partition by QId, InternalId, type order by (select 1))

Online Demo