Java 如何仅在两列上使用distinct

Java 如何仅在两列上使用distinct,java,db2,Java,Db2,我在表格上有这些数据: CARID MAKECODE型号代码年份成本代码VIN当前值 123456 NISS MAX 2013 1 AAMBF45V5A5619007 30000.00 123457 NISS MAX 2013 1 ABMBF4DV423459007 30000.00 123458 NISS MAX 2013 1 ACMBF4D15A5319007 30000.00 123459福特FOC 2013 2 BAB7DF5665A1SD465 30000.00 123460福特FOC

我在表格上有这些数据:

CARID MAKECODE型号代码年份成本代码VIN当前值 123456 NISS MAX 2013 1 AAMBF45V5A5619007 30000.00 123457 NISS MAX 2013 1 ABMBF4DV423459007 30000.00 123458 NISS MAX 2013 1 ACMBF4D15A5319007 30000.00 123459福特FOC 2013 2 BAB7DF5665A1SD465 30000.00 123460福特FOC 2013 2 BBF7DF563453SDF65 30000.00 123461福特FOC 2013 2 BCF7DF5624A1SDF65 30000.00 123462 CHEV MAL 2013 3 CAMB456V2234564554 30000.00 123463 CHEV MAL 2013 3 CBMB456V223456454 30000.00 123464 CHEV MAL 2013 3 CCMB456V223456454 30000.00 123465多格格拉2013 4 DADF895OIU2452D25 30000.00 123466多格格拉2013 4 DBDF895OIU2452D25 30000.00 123467 DODG GRA 2013 4 DCDF895OIU2452D25 30000.00 123468东洋COR 2013 5 EA765SADF985SAD6D 30000.00 123469东洋COR 2013 5 EB765SADF985SAD6D 30000.00 123470东洋COR 2013 5 EC765SADF985SAD6D 30000.00 123471东洋RAV 2013 6 FA45H45K3HJ4K5H4K 30000.00 123472东洋RAV 2013 6 FB45H45K3HJ4K5H4K 30000.00 123473东洋RAV 2013 6 FC45H45K3HJ4K5H4K 30000.00 123474 CHEV EQU 2013 7 GA8754DF876SAD876 30000.00 123475 CHEV EQU 2013 7 GB8754DF876SAD876 30000.00 123476 CHEV EQU 2013 7 GC8754DF876SAD876 30000.00

我想退回的是:

CARID MAKECODE型号代码年份成本代码VIN当前值 123456 NISS MAX 2013 1 AAMBF45V5A5619007 30000.00 123459福特FOC 2013 2 BAB7DF5665A1SD465 30000.00 123462 CHEV MAL 2013 3 CAMB456V2234564554 30000.00 123465多格格拉2013 4 DADF895OIU2452D25 30000.00 123468东洋COR 2013 5 EA765SADF985SAD6D 30000.00 123471东洋RAV 2013 6 FA45H45K3HJ4K5H4K 30000.00 123474 CHEV EQU 2013 7 GA8754DF876SAD876 30000.00

我正在从java应用程序访问DB2数据库,不包括使用此查询输入的日期不可用的车辆:

SELECT A.CARID, B.CATEGORY, C.MAKEDESC, D.MODELDESC, A.YEAR, B.PERDAY, A.CURRVALUE
             FROM SCM.CAR_INV A
             INNER JOIN SCM.CAR_COST B ON A.COSTCODE = B.COSTCODE
             INNER JOIN SCM.CAR_MAKE C ON A.MAKECODE = C.MAKECODE
             INNER JOIN SCM.CAR_MODEL D ON A.MODELCODE = D.MODELCODE
             WHERE NOT CARID IN (SELECT CARID
             FROM SCM.CAR_RESERV
             WHERE ((PICKUP BETWEEN ? AND ?)
             OR (DROPOFF BETWEEN ? AND ?))
             OR (? BETWEEN PICKUP AND DROPOFF
             OR (? BETWEEN PICKUP AND DROPOFF)))    

因此,我只想将DISTINCT应用于MAKEDESC和MODELDESC列,这将返回找到的第一个汽车ID,并跳过其后具有相同品牌和型号的任何ID。

如果您想在MAKEDESC和MODELDESC上应用DISTINCT
使用:按MAKEDESC、MODELDESC分组。。。除此之外,他需要在所有其他列上使用聚合函数。你不能这样做,因为你必须告诉系统你想要为所有其他列使用哪一个值。您可以在这两列上放置一个GROUP by,在其他所有列上放置一个聚合,但通常会有更好的选择。比如在CTE中包装对CAR_INV的访问并使用查询,这就是问题所在。请注意,不要使用BETWEEN,对于重叠的范围有两种比较方式。