是否可以过滤分组的SQL行?

时间:2018-01-26 12:33:00

标签: sql sql-server tsql

我想将行组合在一起,然后过滤每个组。如果我有下表:

mytable的

id | filename | region | text
------------------------------------
1  | aaa      | 1      | Region1 aaa
2  | bbb      | 2      | Region2 bbb
3  | aaa      | 5      | Region5 aaa
4  | bbb      | 5      | Region5 bbb

我想按文件名进行分组,并使用MAX区域编号取出每个组中的行。这会将数据导入适当的组:

SELECT filename
FROM mytable
GROUP BY filename

...但是我可以在每个组中选择具有最高区域值的条目,在这种情况下,它将是ID为3和4的行吗? HAVING子句仅过滤整个组,而不过滤组内的行。

2 个答案:

答案 0 :(得分:1)

使用row_number

select top 1 with ties *
from tbl
order by row_number() over(partition by filename order by region desc)

答案 1 :(得分:1)

select  *
from ( select * 
            , row_number() over(partition by filename order by region desc) as rn
       from table 
     ) tt 
where rn = 1