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

时间:2018-04-26 05:09:02

标签: mysql stored-procedures greatest-n-per-group

我是Stored Procedure的新手,我搜索了答案,找不到一个适合我的人。

我有一张如下表:

|---------------------|------------------|----------------------|
|     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子句或选择列表中包含的子查询中,并且要聚合的列是外部引用。

如何轻松完成这项工作?

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我得到了它的工作

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

答案 2 :(得分:0)

以下是您需要的查询。

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

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

答案 3 :(得分:0)

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