我有一张这样的表
Table A:
Id Count
1 4
1 16
1 8
2 10
2 15
3 18
etc
Table B:
1 sample1.file
2 sample2.file
3 sample3.file
TABLE C:
Count fileNumber
16 1234
4 2345
15 3456
18 4567
依旧......
我想要的是这个
1 sample1.file 1234
2 sample2.file 3456
3 sample3.file 4567
要从表A中获取最大值,我使用
Select MAX (Count) from A where Id='1'
这很有效但我的问题是将数据与另一个表组合时。
当我加入表B和表A时,我需要获得所有ID的MAX,在我的查询中我不知道Id是什么。
这是我的查询
SELECT B.*,C.*
JOIN A on A.Id = B.ID
JOIN C on A.id = B.ID
WHERE (SELECT MAX(COUNT)
FROM A
WHERE Id = <what goes here????>)
总结一下,我想要的是表B中的值,表c中的FileNumber(其中计数是表A中ID的最大值)。
更新:修正上面的表C.看起来我需要表A.
答案 0 :(得分:2)
我认为这是您正在寻找的查询:
select b.*, c.filenumber from b
join (
select id, max(count) as count from a
group by id
) as NewA on b.id = NewA.id
join c on NewA.count = c.count
但是,您应该考虑到我不明白为什么在表A中id = 1你选择16来匹配表C(这是最大值)而对于表A中的id = 2你选择10到匹配表C(这是最小值)。我认为你在两种情况下都意味着最大值。
修改强>
我看到你已经更新了tableA数据。鉴于以前的数据,查询结果如下:
+----+---------------+------------+
| ID | FILENAME | FILENUMBER |
+----+---------------+------------+
| 1 | sample1.file | 1234 |
| 2 | sample2.file | 3456 |
| 3 | sample3.file | 4567 |
+----+---------------+------------+
答案 1 :(得分:1)
使用Mosty的工作示例(将关键字count重命名为cnt作为列名),这是另一种方法:
with abc as (
select
a.id,
a.cnt,
rank() over (
partition by a.id
order by cnt desc
) as rk,
b.filename
from a join b on a.id = b.id
)
select
abc.id, abc.filename, c.filenumber
from abc join c
on c.cnt = abc.cnt
where rk = 1;
答案 2 :(得分:0)
select
PreMax.ID,
B.FileName,
C2.FileNumber
from
( select C.id, max( C.count ) maxPerID
from TableC C
group by C.ID
order by C.ID ) PreMax
JOIN TableC C2
on PreMax.ID = C2.ID
AND PreMax.maxPerID = C2.Count
JOIN TableB B
on PreMax.ID = B.ID