2014-09-03 2 views
0

я получил следующий SQLFirebird 1.5: Группа по максимальному значению

SELECT GEP.KOD, GEP.IRSZ, GEP.VAROS, GEP.UTCA, GEP.UGYINT, GEP.EMELET, CIKK.NEV, 
GEPELEM.SZAMLALO FROM GEP LEFT JOIN CIKK ON GEP.CIKK = CIKK.KOD LEFT JOIN GEPELEM ON 
GEPELEM.KOD = GEP.KOD WHERE CEG = 27013 
GROUP BY GEPELEM.SZAMLALO, GEP.KOD, GEP.IRSZ, GEP.VAROS, GEP.UTCA, GEP.UGYINT, GEP.EMELET, CIKK.NEV 

И я хотел бы группировать по GEPELEM.SZAMLALO с использованием максимального значения доступной ...
Если я удалить группу с помощью заявлений и только GEP.ELEM.SZAMLALO остается, он дает ошибку

[Error Code: 335544569, SQL State: 42000] GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -104 
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause) 

функции Если я использовать макс() в SELECT, дело это не делает ничего. SQL, работает, но результаты не меняет
, если я использовать макс() в группе по причинам и в избранных:

[Error Code: 335544569, SQL State: 42000] GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -104 
Token unknown - line 2, column 11 
max 

ту же ошибку, если я использую его только в группе по причине ..

Это firebird 1.5.6 (у меня нет выбора для обновления), и я исхожу из фона MySQL.

+1

«я хотел бы группировать по GEPELEM.SZAMLALO, используя его максимальное доступное значение ". Я не понимаю, что вы хотите сделать. Попробуйте отредактировать вопрос с образцами данных и желаемыми результатами. –

ответ

2

Добавьте где пункт в вашем РЕГИСТРИРУЙТЕСЬ состоянии вместо того, где п, Предполагая КЭГ находится в GEPELEM таблице, попробуйте следующее .....

SELECT GEP.KOD 
    , GEP.IRSZ 
    , GEP.VAROS 
    , GEP.UTCA 
    , GEP.UGYINT 
    , GEP.EMELET 
    , CIKK.NEV 
    , MAX(GEPELEM.SZAMLALO) 
FROM GEP 
LEFT JOIN CIKK  ON GEP.CIKK = CIKK.KOD AND GEP.CEG = 27013 
LEFT JOIN GEPELEM ON GEPELEM.KOD = GEP.KOD 
GROUP BY GEP.KOD 
    , GEP.IRSZ 
    , GEP.VAROS 
    , GEP.UTCA 
    , GEP.UGYINT 
    , GEP.EMELET 
    , CIKK.NEV 
+0

CEG находится в таблице GEP, но это сработало, но я не понимаю, почему это сработало ... не могли бы вы объяснить это? – NaGeL182

+0

Когда вы используете внешнее соединение и отфильтровываете некоторые строки, где условие для столбца, которое существует только в одной таблице, оно будет равно null для другой таблицы, поэтому оно в основном преобразует ваше внешнее соединение во внутреннее соединение. Также вы хотели, чтобы Max of a и затем вы попытались добавить этот столбец в свою группу тоже. Если вы хотите, чтобы Max/Min/Avg столбца вы группировали по всем столбцам в выбранном запросе, за исключением тех, которые вы использовали в любой из агрегатных функций Min/Max/Avg/Sum/Count ..... –

+0

@ M.Ali Я не думаю, что перемещение 'CEG' в условие соединения здесь корректно (теперь будут возвращены все строки' GEP', а не только те, с 'CEG = 27013'). Добавление «MAX» - это, вероятно, все, что было необходимо. –

Смежные вопросы