Firebird组通过检索额外数据

时间:2010-02-22 08:27:08

标签: sql group-by firebird

我有一个包含6列的表:idabcdeid是主键。

我正在尝试为该组检索不同的a,b,c,max(d),并且与max(d)在同一行中的e是(列“id”与我的查询无关)

我尝试了这个查询:

SELECT a, b, c, MAX(d), e
FROM tablename
GROUP BY a, b, c;

但是它给了我“选择列表中的表达式无效(不包含在聚合函数或GROUP BY子句中)。”如果我添加一个额外的GROUP BY e,它只给我一个不同的a,b,c,e,每个都有一个MAX(d),这不是我需要的。我明白为什么会发生这种情况,我不明白的是如何让它做我需要的......

子查询是否可行?你能帮我写一个吗?

最令人沮丧的是我的查询可以在MySQL中运行:(

1 个答案:

答案 0 :(得分:1)

SELECT t1.a,t1.b,t1.c,t1.d,t1.e
FROM tablename AS t1
INNER JOIN (SELECT a, b, c, MAX(d) d
            FROM tablename
            GROUP BY a, b, c
           ) AS t2
ON  t1.a = t2.a
AND t1.b = t2.b
AND t1.c = t2.c
AND t1.d = t2.d

请注意,如果MAX(d)绑定了多行,则此查询将返回a,b,c值为d的所有行。

我不知道MySQL在这种情况下如何处理重复的行。