gpt4 book ai didi

sql - 在列的子集上选择不同的和分组依据

转载 作者:行者123 更新时间:2023-12-04 22:21:22 25 4
gpt4 key购买 nike

我正在使用 SQL Server 2008,但我陷入了 DISTINCTGROUP 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 ,但是关于 DateNameId 发生了错误。
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 开始排序,因此外部查询只选择第一个。

关于sql - 在列的子集上选择不同的和分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18186379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com