SQLite SQL查询 - 3级/嵌套在同一个表上?

时间:2015-08-13 21:51:12

标签: sql sqlite

我需要一个查询,在表中选择行,从另外两列中搜索每个唯一对的给定列中的最大值。考虑这个非常简单的示例表:

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列。

非常感谢帮助。

3 个答案:

答案 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)

,则不起作用