我想从我的测试项目的表中选择最高余额数。
例如, 如果用户说,他想知道第5个最高余额,我的查询应该返回相应的名称。
以下是该方案的示例测试表:
CREATE TABLE ACCT_MSTR(
ACCTID INTEGER PRIMARY KEY,
NAME VARCHAR(50),
CITY VARCHAR(20),
BRID VARCHAR(5),
DOO DATETIME,
CBALANCE MONEY,
UBALANCE MONEY,
STATUS VARCHAR(1)
)
INSERT INTO ACCT_MSTR VALUES(101, 'SARA', 'BLR', 'BR1', GETDATE(), 1000, 1000, 'A')
INSERT INTO ACCT_MSTR VALUES(102, 'SANTHOSH', 'BLR', 'BR10', GETDATE() - 40, 5500, 100, 'A')
INSERT INTO ACCT_MSTR VALUES(103, 'KAVIN', 'GOBI', 'GI20', GETDATE() - 100, 2500, 10500, 'U')
INSERT INTO ACCT_MSTR VALUES(104, 'ARAVIND', 'GOBI', 'GI20', GETDATE() - 20, 10000, 5500, 'A')
INSERT INTO ACCT_MSTR VALUES(105, 'BALA', 'HYD', 'HYD2', GETDATE()-1000, 1000, 500, 'U')
INSERT INTO ACCT_MSTR VALUES(106, 'PRABU', 'TUP', 'TUP25', GETDATE() - 1000, 7500, 1000, 'A')
INSERT INTO ACCT_MSTR VALUES(107, 'ANBU', 'CHE', 'CHE1', GETDATE()-250, 8000, 1000, 'A')
INSERT INTO ACCT_MSTR VALUES(108, 'AMAR', 'CHE', 'CHE3', GETDATE()-2500, 7800, 1000, 'U')
INSERT INTO ACCT_MSTR VALUES(109, 'DHINESH', 'CBE', 'CBE1', GETDATE()-150, 3500, 1000, 'A')
INSERT INTO ACCT_MSTR VALUES(110, 'DUPARAVIND', 'GOBI', 'GI20', GETDATE() - 20, 10000, 5500, 'A')
INSERT INTO ACCT_MSTR VALUES(111, 'DUPSANTHOSH', 'BLR', 'BR10', GETDATE() - 40, 5500, 100, 'A')
我使用了以下查询(第5高):
SELECT NAME FROM ACCT_MSTR
WHERE CBALANCE = ( SELECT MIN(CBALANCE)
FROM ACCT_MSTR
WHERE CBALANCE IN ( SELECT DISTINCT TOP 5 CBALANCE
FROM ACCT_MSTR
ORDER BY CBALANCE DESC
)
)
如果我想知道无效的第15个最高值(仅表12中的记录总数),它应该返回NULL。相反,它返回表中的最后一个最高值,因为我使用 TOP 15 。
如果在这种情况下它与给定条件不匹配,任何想法都会返回NULL。
答案 0 :(得分:2)
假设您正在使用SQL Server,您可以:
declare @name varchar(50)
select @name = name
from (
select row_number() over (order by CBALANCE desc) rn
, name
from acct_mstr
) as SubQueryAlias
where rn = 15
-- Return a rowset of one row, even if no row matched
-- the where clause above
select @name as name