簡體   English   中英

提高 select 查詢性能和可讀性

[英]improve select query performance and readablity

我有下表LOANACCOUNT 我想確定每種賬戶類型余額最多的賬戶( IDCREATIONDATETYPE )。

貸款賬戶表:

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM