在列子集上选择DISTINCT和GROUP BY [英] Select distinct and group by on subset of columns
本文介绍了在列子集上选择DISTINCT和GROUP BY的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用SQL Server 2008,我陷入了DISTINCT
和GROUP BY
之间的恶性循环
我有以下虚拟表格myTable
:
ID Street City PostalCode ProjectID Date NameId
1 Bar Street Sunny Beach 666 7 25/08/2013 111
2 Sin Street Ibiza 999 5 12/06/2013 222
3 Bar Street Sunny Beach 666 7 07/08/2013 333
4 Bora Bora Bora Bora 1000 10 17/07/2013 444
5 Sin Street Ibiza 999 5 04/07/2013 555
我希望获得具有不同地址(街道、城市、邮政编码)和项目ID的所有记录(可能是第一次出现)。
例如,此处的结果应为:
ID Street City PostalCode ProjectID Date NameId
1 Bar Street Sunny Beach 666 7 25/08/2013 111
2 Sin Street Ibiza 999 5 12/06/2013 222
4 Bora Bora Bora Bora 1000 10 17/07/2013 444
我尝试在所有列上使用DISTINCT
,但这不起作用,因为ID
是唯一的,并且总是返回所有列。我也尝试了Group by Street, City PostalCode ProjectID
,但关于Date
和NameId
出现错误。
Column '' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
那么如何才能得到列的子集是不同的结果呢?
推荐答案
您要使用row_number()
函数:
select t.ID, t.Street, t.City, t.PostalCode, t.ProjectID, t.Date, t.NameId
from (select t.*,
row_number() over (partition by Street, City, PostalCode, ProjectId
order by id
) as seqnum
from t
) t
where seqnum = 1;
这是一个窗口函数,它为某些列(由partition by
子句定义)中具有相同值的行分配一个顺序值。这些行中的顺序由order by
子句确定。在本例中,它从组中最低的id
开始排序,因此外部查询只选择第一个。
这篇关于在列子集上选择DISTINCT和GROUP BY的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文