如果我有像
这样的结果集ID1 ID2
43918 804
43917 804
44047 805
44046 805
44045 805
44044 805
44048 805
45172 806
44298 807
44296 808
44297 808
44294 808
44295 808
44331 809
44330 809
44334 809
44333 809
44332 809
44323 810
如何将其限制为
之类的结果集ID1 ID2
43918 804
44047 805
45172 806
44298 807
44296 808
44331 809
44323 810
每个唯一ID2基本上有一个ID1。列来自同一个表。
select ID1,ID2
from table
where ID2 in (804, 805, 806, 807, 808, 809, 810);
答案 0 :(得分:9)
select max(id1), id2
from table
group by id2
我假设你想要最大值。关键是你要对id2列进行分组,并在id1上执行某种聚合函数(min,max,sum,avg)
答案 1 :(得分:4)
SELECT MIN(ID1), ID2 FROM Table GROUP BY ID2
这给出了您用作示例的结果集 - 每个ID2的最低ID1。您可以使用其他函数代替MIN来获取ID2值的其他有趣值,确切的函数列表因数据库产品而异。
答案 2 :(得分:0)
不确定它是否是一种智能方式,但您可以嵌套查询类似
的查询select
t1.ID2,
(select TOP 1 id1 from table where id2 = t1.id2 from table as t2) as ID1
from table as t1
where ID2 in (804,805,806,807,808,809,810);
TOP 1是特定于SQL Server的,如果您使用的是mysql / postgres,则需要选择... LIMIT 1
答案 3 :(得分:0)
在ID1列上使用group by然后使用聚合函数
SELECT MAX(ID1) AS ID1, ID2
FROM TABLE
GROUP BY ID2
这将为您提供与ID2相关的最高ID1值