聚合SQL函数以仅从每个组中获取第一个
收藏

我有2个表-一个Account表和一个Users表。每个帐户可以有多个用户。我有一种情况,我想对这两个表执行单个查询/联接,但我希望所有帐户数据(Account。*)和仅第一组用户数据(特别是它们的名称)。

我不想在汇总组中进行“最小”或“最大”操作,而是想做“第一”。但是,显然,TSQL中没有“第一”聚合函数。

关于如何获取此查询的任何建议?显然,很容易获得Account x Users的笛卡尔积:

 SELECT User.Name, Account.* FROM Account, User
 WHERE Account.ID = User.Account_ID

但是,如何根据他们的User.ID的顺序仅从产品中获得第一个用户呢?

最佳答案

与其分组,不如这样...

select
    *

from account a

join (
    select 
        account_id, 
        row_number() over (order by account_id, id) - 
            rank() over (order by account_id) as row_num from user
     ) first on first.account_id = a.id and first.row_num = 0

    公众号
    关注公众号订阅更多技术干货!