我有下表
LOANACCOUNT
。我想确定每种帐户类型余额最多的帐户(ID
,CREATIONDATE
,TYPE
)。
贷款帐户表:
ID CREATIONDATE TYPE BALANCE
1 2019-10-10 16:44:42 FIXED 390.92951
2 2019-10-10 16:44:42 REVOLVING 81.68381
3 2019-10-10 16:44:42 DYNAMIC 818.80966
4 2019-10-10 16:44:42 FIXED 166.83337
5 2019-10-10 16:44:42 REVOLVING 888.93255
6 2019-10-10 16:44:42 DYNAMIC 422.1623
7 2019-10-10 16:44:42 FIXED 165
8 2019-10-10 16:44:42 REVOLVING 122.37553
9 2019-10-10 16:44:42 DYNAMIC 370.60668
10 2019-10-10 16:44:42 FIXED 1101.10781
11 2019-10-10 16:44:42 REVOLVING 387.35689
12 2019-10-10 16:44:42 DYNAMIC 1.029
13 2019-10-10 16:44:42 FIXED 420.85499
14 2019-10-10 16:44:42 REVOLVING 0
15 2019-10-10 16:44:42 DYNAMIC 233.53848
预期输出:
ID CREATIONDATE TYPE
10 2019-10-10 16:44:42 FIXED
3 2019-10-10 16:44:42 DYNAMIC
5 2019-10-10 16:44:42 REVOLVING
我的尝试
(select id, creationdate, type
from LOANACCOUNT
where type = 'FIXED'
order by balance desc
limit 1)
union
(select id, creationdate, type
from LOANACCOUNT
where type = 'DYNAMIC'
order by balance desc
limit 1)
union
(select id, creationdate, type
from LOANACCOUNT
where type = 'REVOLVING'
order by balance desc
limit 1)
我的查询之所以有效,是因为目前我只有这3种类型:FIXED,REVOLVING,DYNAMIC。但是,如果我添加了包含另一种类型的新行,则必须对其查询进行编辑以使其起作用。
答案 0 :(得分:1)
此sql语句
SELECT
ID,
CREATIONDATE,
la.TYPE
FROM
`loan account` la
INNER JOIN
(SELECT
TYPE, MAX(BALANCE) BALANCE
FROM
`loan account`
GROUP BY TYPE) la1
on la.TYPE = la1.TYPE and
la.BALANCE = la1.BALANCE
GROUP BY la.TYPE,CREATIONDATE,ID;
给你:
ID CREATIONDATE TYPE
3 2019-10-10T16:44:42Z DYNAMIC
10 2019-10-10T16:44:42Z FIXED
5 2019-10-10T16:44:42Z REVOLVING
Thx适应了Raymond Nijland 例 http://sqlfiddle.com/#!9/ecab9b/10
答案 1 :(得分:1)
您可以使用MySQL | Recursive CTE (Common Table Expressions)
例如:
;WITH cte AS (
SELECT
`ID`, ROW_NUMBER() OVER (PARTITION BY `TYPE` ORDER BY `BALANCE` DESC) AS RowNum
FROM LOANACCOUNT as t
)
SELECT c.`ID`,`CREATIONDATE`,`TYPE` FROM LOANACCOUNT as t join cte as c on t.Id=c.Id WHERE c.RowNum=1