[英]improve select query performance and readablity
我有下表
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
預期 output:
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 種類型:固定、旋轉、動態。 但是,如果我添加一個包含另一種類型的新行,則必須編輯我的查詢才能使其正常工作。
此 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
您可以使用MySQL | 遞歸 CTE(公用表表達式)
例如:
;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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.