Firebird 1.5:按最大值分组

时间:2014-09-03 12:10:00

标签: sql firebird

我得到了以下SQL

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使用其可用的最大值进行分组...
如果我删除GRoup by语句并且只保留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中使用max()函数,则它什么都不做。 SQL运行,但结果不会改变 如果我按原因在组中使用max()并在select:

[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 个答案:

答案 0 :(得分:2)

在JOIN条件中添加where子句而不是where子句,假设CEG在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