首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择一列的顶部1,根据重复ID与其他唯一字段进行分组

选择一列的顶部1,根据重复ID与其他唯一字段进行分组
EN

Stack Overflow用户
提问于 2018-02-28 16:28:34
回答 3查看 43关注 0票数 1

根据在不同的列(Account_Occupant)中选择最高的序列,我正在为表中的每个帐户(千)只需要一行的数据进行查询。

我需要返回一个不同的帐号(90006),最高的account_occupant (11)和对应于该account_occupant (迈克尔)的名称。以下是一个数据示例:

代码语言:javascript
复制
Account_NUM Account_Occupant    Name
90006           1               JOHN
90006           2               MARY
90006           3               MARY
90006           4               KERRI
90006           5               PATRICIA
90006           6               DARYL
90006           7               ASHLEY
90006           8               DARYL
90006           9               DIANE
90006           10              DARYL
90006           11              MICHAEL

我需要返回的一个例子是:

代码语言:javascript
复制
Account_NUM Account_Occupant    Name
90006           11              MICHAEL

下面是最近的查询尝试:

代码语言:javascript
复制
    SELECT 
    DISTINCT CIS.Account_NUM
        ,(
            SELECT top 1 CISa.Account_Occupant 
            FROM database.view CISa 
            WHERE CISa.Account_NUM = CIS.Account_NUM 
            ORDER BY CISa.Account_Occupant DESC
         ) AS Newest_Occupt_Num
    , CIS.name
    FROM database.view CIS
    WHERE EXISTS 
        (
            SELECT TOP 1 CIS2.Account_Occupant 
            FROM database.view CIS2 
            WHERE CIS.Account_NUM = CIS2.Account_NUM 
            AND CIS.Account_Occupant = CIS2.Account_Occupant 
            ORDER BY CIS2.Account_NUM, CIS2.Account_Occupant DESC
        )
    ORDER BY 1,2

我已经做了相当多的搜索和尝试的变化,小组一组,在其中的声明,子选择和联合声明,我在这个论坛上找到,但仍然没有得到正确的。为编辑向人们提问表示歉意,因为这些问题指出了我提问中的错误--非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-28 16:56:30

另一种你可以尝试的方法。

代码语言:javascript
复制
CREATE TABLE TBL(Account_NUM VARCHAR(100),Account_Occupant INT,Name VARCHAR(100))

INSERT INTO TBL
SELECT '123',11,'ABC'

INSERT INTO TBL
SELECT '123',12,'XYZ'


INSERT INTO TBL
SELECT '124',11,'ABC'


INSERT INTO TBL
SELECT '124',12,'XYZ'


SELECT DISTINCT T.*, T1.Name FROM
(
   SELECT Account_NUM, MAX(Account_Occupant) OVER (PARTITION BY Account_NUM) AS MAX_Account_Occupant
   FROM TBL
 ) T
 INNER JOIN TBL T1 ON T1.Account_NUM= T.Account_NUM AND T1.Account_Occupant=T.MAX_Account_Occupant

输出

代码语言:javascript
复制
    Account_NUM MAX_Account_Occupant    Name
   ------------ --------------------   ----- 
    123               12                XYZ
    124               12                XYZ
票数 1
EN

Stack Overflow用户

发布于 2018-02-28 16:32:19

如果我正确理解了你的描述,你就不需要分组了。一个简单的降序会给你想要的:

代码语言:javascript
复制
SELECT TOP 1 Account_NUM, Account_Occupant, Name
FROM table1
ORDER BY Account_Occupant DESC

如果您的数据库中除了Account_NUM之外还有其他记录,而且您只想要这个Account_NUM,那么只需添加一个条件:

代码语言:javascript
复制
SELECT TOP 1 Account_NUM, Account_Occupant, Name
FROM table1
WHERE Account_NUM = 90006
ORDER BY Account_Occupant DESC
票数 1
EN

Stack Overflow用户

发布于 2018-02-28 16:44:18

如果您正在寻找每一个( Account_Num )中的前1位,这只是另一种选择。

我之所以提交这个,是因为你正在寻找一组成员并加入。

代码语言:javascript
复制
Select Top 1 with ties *
 From  YourTable 
 Order By Row_Number() over (Partition By Account_NUM Order By Account_Occupant Desc)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49034249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档