我是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子句或选择列表中包含的子查询中,并且要聚合的列是外部引用。
如何轻松完成这项工作?
答案 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