Фильтр с разделением в SQL Server - PullRequest
0 голосов
/ 04 декабря 2018

Вот что я хотел бы получить

select 
    *,  
    rank() over (partition by col_a order by col_b) as some_rank 
from 
    table_A
where 
    some_rank = 1

Очевидно, это не сработает.Я могу использовать CTE или временную таблицу, чтобы получить то, что я хочу, но мне интересно, можно ли сделать все сразу (без CTE или временной таблицы).Что-то вроде having с group by

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

вы можете сделать это старомодным способом

SELECT * 
FROM 
    (
    select 
        *,  
        rank() over (partition by col_a order by col_b) as some_rank 
    from 
        table_A
    ) T
WHERE some_rank = 1
0 голосов
/ 04 декабря 2018

Вы можете использовать top (1) с предложением ties:

select top (1) with ties ta.*
from table_A ta
order by rank() over (partition by col_a order by col_b);

Только печально то, что вы не можете отфильтровать строки, которые больше 1, и это снижает производительность.

...