我正在尝试编写从下面的数据中生成所需结果的sql。
数据:
IDNum Opt1 Opt2 Opt3 Count
1 A A E 1
1 A B J 4
2 A A E 9
3 B A F 1
3 B C K 14
4 A A M 3
5 B D G 5
6 C C E 13
6 C C M 1
期望的结果:
IDNum Opt1 Opt2 Opt3 Count
1 A B J 4
2 A A E 9
3 B C K 14
4 A A M 3
5 B D G 5
6 C C E 13
基本上我想为每个ID Num提供最高计数的完整记录。我试过做一个分组,但如果我按Opt1,Opt2,Opt3分组,这不起作用,因为它返回每个(ID Num,Opt2,Opt3,Opt4)组合的最高计数,这不是我想要的。如果我只按ID Num分组,我可以获得每个ID Num的最大值,但是我丢失了关于哪个(Opt1,Opt2,Opt3)组合给出这个计数的信息。
我觉得我以前做过这个,但我不经常使用sql,我不记得怎么做。有一个简单的方法吗?
答案 0 :(得分:1)
修改强> 在澄清访问问题之前,这将起作用。我不知道是否支持此查询。
我认为这适用于SQL Server。
select * from data
inner join (select idnum, max(count) from data
group by idNum )sub
on sub.IdNum=data.IdNum && sub.Count=data.Count
当然,如果你有两个具有相同计数的id,它将返回两行......
答案 1 :(得分:1)
这样的事情:
SELECT * FROM table AS t1
JOIN ( SELECT id, max(count) as Id FROM table GROUP BY id ) AS t2
ON t1.id = t2.id AND t1.id = t2.id
这假设没有idnum具有相同的最大数量,或者你将得到两个idnums
答案 2 :(得分:0)
尝试此查询:
SELECT * FROM my_table
GROUP BY IDNum
HAVING Count = MAX(Count)
它应该适用于Access,但我没有测试它。