Ant*_*lev 4 sql distinct sql-server-2008
我使用的是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
Run Code Online (Sandbox Code Playgroud)
我想获得具有不同地址(Street,City,PostalCode)和ProjectID的所有记录(可能是第一次出现).例如,这里的结果应该是:
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
Run Code Online (Sandbox Code Playgroud)
我已尝试过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.
Run Code Online (Sandbox Code Playgroud)
那么如何得到一个结果,其中列的子集是不同的?
你想使用这个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;
Run Code Online (Sandbox Code Playgroud)
这是一个窗口函数,它为某些列(由partition by子句定义)中具有相同值的行分配顺序值.这些行中的排序由该order by子句决定.在这种情况下,它开始以id组中的最低顺序排序,因此外部查询只选择第一个.