Группа Firebird путем получения дополнительных данных

У меня есть таблица с 6 столбцами: id, a, b, c, d, e. 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 :(


person Rytis    schedule 22.02.2010    source источник


Ответы (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 справляется с повторяющимися строками в этом сценарии.

person Ed Harper    schedule 22.02.2010