我需要一个查询,在表中选择行,从另外两列中搜索每个唯一对的给定列中的最大值。考虑这个非常简单的示例表:
a b c d
1 1 0 1
1 1 2 2
1 2 1 1
1 2 3 2
2 1 7 5
2 1 6 4
从列a和b形成唯一对。我们在列d中寻找最大值。结果返回相应的列a,b和c。因此,对于上面的示例数据,返回的结果应如下所示:
a b c
1 1 2
1 2 3
2 1 7
我尝试过嵌套查询和连接,但我还没达到目标。我还进行了谷歌搜索,寻找讨论并咨询了几本数据库书籍,但无济于事。我看到大量涉及多个表的嵌套查询示例,但没有涉及同一个表的示例。
似乎问题需要三次通过(嵌套): 1)获得一组独特的a& b对 2)对于该集合中的每一行,找到d的最大值:返回一组a,b和d行 3)对于每个三元组a,b和d值,查询返回a,b和c列。
非常感谢帮助。
答案 0 :(得分:3)
先把你搞错了,抱歉。 您可以使用GROUP BY,2列来查找最大值,然后加入原始表。 在您的示例中,此查询执行以下操作:
SELECT t2.a,t2.b,t2.c
FROM (SELECT a, b, max(d) as max_d
FROM TABLE_NAME
GROUP BY a,b) t1
inner join TABLE_NAME t2 on(t1.a=t2.a AND t1.b=t2.b AND t1.max_d=t2.d)
答案 1 :(得分:1)
另一种选择是在select
原因中使用子查询,额外的好处是,即使存在重复的a, b, d
组合,它也会起作用
select
a,
b,
(
select c
from T t2
where t1.a = t2.a and t1.b = t2.b
order by t2.d desc
limit 1
) c
from T t1
group by a, b;
答案 2 :(得分:1)
在SQLite 3.7.11或更高版本中,您可以简单地从既未分组也不聚合的列中选择值,并且输出将来自与MAX / MIN匹配的同一行:
SELECT a, b, c, MAX(d)
FROM MyTable
GROUP BY a, b
注意:如果省略MAX(d)
。