SQL - Return 不同的行,其中 1 列值用作不同的标识符

SQL - Return Distinct ROWS whereby 1 column value is used as Distinct identifier

我正在使用 SQL Server Management Studio v17.4。

我有一个查询 returns 一堆网站 url 和那个 url 的用户名。

查询returns每个用户名每个url。

但是,我只对每个唯一 url 的第一个用户名实例感兴趣。

下面是我当前的示例代码:

DROP TABLE IF EXISTS #TestUrls

SELECT

W.DomainName,
U.LoginUserName,

INTO #TestUrls

FROM WebCompany W
INNER JOIN Users U ON W.WebId = U.WebId

SELECT

concat('http://', DomainName, '.', '.co.uk') URL, LoginUserName Username

FROM #TestUrls

所以返回的数据样本如下:

URL               | Username
www.test.co.uk    | test1@test.co.uk
www.test.co.uk    | test2@test.co.uk
www.test.co.uk    | test3@test.co.uk
www.test.co.uk    | test4@test.co.uk
www.test.co.uk    | test5@test.co.uk
www.testxxx.co.uk | test1@testxxx.co.uk
www.testxxx.co.uk | test2@testxxx.co.uk
www.testxxx.co.uk | test3@testxxx.co.uk
www.testxxx.co.uk | test4@testxxx.co.uk

我要:

URL               | Username
www.test.co.uk    | test1@test.co.uk
www.testxxx.co.uk | test1@testxxx.co.uk

我尝试过使用 DISTINCT,但它仅 returns 您在其上使用 DISTINCT 语句的列。

注意我不是 SQL 的高级用户。我试图找到一个资源来满足我的要求,但没有真正成功。

在 SQL table 中没有 第一行 这样的东西。 SQL table 表示 无序 集。排序是数据,仅由列值提供。

您可以通过以下操作提取特定值,例如最小值:

select DomainName, MIN(LoginUserName) as LoginUserName
from #TestUrls
group by DomainName;

找到最小的登录用户名:

SELECT
concat('http://', DomainName, '.', '.co.uk') URL, min(LoginUserName) Username
FROM #TestUrls
GROUP BY DomainName