2010-02-22 84 views
0

我有6列的表格:idabcde。主要关键是id火鸟组

我想检索不同的a,b,c,max(d)对于该组,并且e与max(d)在同一行中存在(列“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
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在这种情况下如何处理重复的行