如何使用存储过程和条件获取数据库表结果?

xjreopfe  于 2021-06-24  发布在  Mysql
关注(0)|答案(4)|浏览(343)

这个问题在这里已经有答案了

sql仅选择列上具有最大值的行[重复](27个答案)
两年前关门了。
我是新的存储过程,我寻找答案,但没有找到一个适合我。
我有一张如下的table:

|---------------------|------------------|----------------------|
|     InterfaceID     |       Prefix     |      FinancialID     |
|---------------------|------------------|----------------------|
|        1501         |      ADM/B/11/   |          8           |
|---------------------|------------------|----------------------|
|        1501         |      ASD/K/10/   |          7           |
|---------------------|------------------|----------------------|
|        1502         |      BDM/H/22/   |          7           |
|---------------------|------------------|----------------------|
|        1503         |      CDM/Q/14/   |          6           |
|---------------------|------------------|----------------------|
|        1506         |      FDM/R/17/   |          8           |
|---------------------|------------------|----------------------|
|        1506         |      FDU/R/16/   |          7           |
|---------------------|------------------|----------------------|
|        1506         |      FDT/R/14/   |          6           |
|---------------------|------------------|----------------------|
|        1506         |      FDD/R/12/   |          5           |
|---------------------|------------------|----------------------|
|        1506         |      LMD/R/10/   |          4           |
|---------------------|------------------|----------------------|

我需要这样的输出

|---------------------|------------------|----------------------|
|     InterfaceID     |       Prefix     |      FinancialID     |
|---------------------|------------------|----------------------|
|        1501         |      ADM/B/11/   |          8           |
|---------------------|------------------|----------------------|
|        1502         |      BDM/H/22/   |          7           |
|---------------------|------------------|----------------------|
|        1503         |      CDM/Q/14/   |          6           |
|---------------------|------------------|----------------------|
|        1506         |      FDM/R/17/   |          8           |
|---------------------|------------------|----------------------|

也就是说,如果要为每个 InterfaceID 最高 FinancialID .
我尝试了这个选择查询:

select InterfaceID,Prefix,FinancialID 
from aInterfaceTable
WHERE Financialid=(select max(Financialid))

但这给了我一个错误
聚合不能出现在where子句中,除非它出现在having子句或select列表中包含的子查询中,并且被聚合的列是外部引用。
如何轻松做到这一点?

yrwegjxp

yrwegjxp1#

这是您需要的查询。

SELECT I.InterfaceID, I.Prefix, I.FinancialID
FROM INTERFACE I
INNER JOIN (
    SELECT InterfaceID, MAX(FinancialID) as HF
    FROM INTERFACE 
    GROUP BY InterfaceID
) IA ON I.InterfaceID = IA.InterfaceID AND I.FinancialID = IA.HF

这是你可以玩的工作小提琴。https://www.db-fiddle.com/f/bcbheqni2ffjjeksxrw82q/0

jvlzgdj9

jvlzgdj92#

SELECT interfaceid,Prefix, max(FinancialID) 
             FROM table 
             GROUP BY interfaceid
zvokhttg

zvokhttg3#

我成功了

select i.InterfaceID,i.Prefix,i.FinancialID 
from aInterfaceTable i
WHERE Financialid=(select max(Financialid) from aInterfaceTable where InterfaceID = i.InterfaceID)
r3i60tvu

r3i60tvu4#

select a.*,Prefix from (select InterfaceID,max(FinancialID) FinancialID  from 
aInterfaceTable
group by InterfaceID) a
left join aInterfaceTable b on a.InterfaceID = b.InterfaceID and a.FinancialID 
= b.FinancialID

相关问题