基于选择不同列中的最高序列(Account_Occupant),我正在努力查询数据,我只需要一行表中的一行(数千)。
我需要返回一个不同的帐号(90006),最高的account_occupant(11)和与该account_occupant(MICHAEL)对应的名称。这是一个数据样本:
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
我需要返回的一个例子是:
Account_NUM Account_Occupant Name
90006 11 MICHAEL
这是最近的查询尝试:
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
我已经做了相当多的搜索和尝试变体group by,group by在where语句中,我在本论坛中找到的子选择和union语句,但仍然没有正确。编辑道歉要求人们提出问题,指出我提问中的错误 - 非常感谢。
您可以尝试另一种方法。
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
产量
Account_NUM MAX_Account_Occupant Name
------------ -------------------- -----
123 12 XYZ
124 12 XYZ
如果我正确理解您的描述,则不需要分组。一个简单的降序将给你想要你想要的:
SELECT TOP 1 Account_NUM, Account_Occupant, Name
FROM table1
ORDER BY Account_Occupant DESC
如果您的问题中除Account_NUM
以外的90006
数据库中有其他记录,并且您只想要这个Account_NUM
,那么只需添加一个条件:
SELECT TOP 1 Account_NUM, Account_Occupant, Name
FROM table1
WHERE Account_NUM = 90006
ORDER BY Account_Occupant DESC
如果您正在寻找前1个PER Account_Num,那么这只是另一种选择。
我提交这个只是因为你正在寻找GROUP BY和JOIN
Select Top 1 with ties *
From YourTable
Order By Row_Number() over (Partition By Account_NUM Order By Account_Occupant Desc)