2010-05-05 64 views
3

我想知道应该返回唯一的(通过CUSTOMER_ID,VEHICLE_ID,DEALER_ID和EVENT_TYPE_ID)行的SQL语句(对于ORACLE DBMS)应该是什么,但它会返回该行的最新日期(EVENT_INITIATED_DATE)。我试过DISTINCT和GROUP BY,但无法弄清楚如何处理EVENT_INITIATED_DATE(即DATE数据类型)。什么是删除重复项但保留附加列数据的SQL语句?

CUSTOMER_ID   VEHICLE_ID    DEALER_ID EVENT_TYPE_ID   EVENT_INITIATED_DATE  
---------------------- ---------------------- ---------- ---------------------- ------------------------- 
22197630    23093399    6040  20      11-JAN-07     
22197630    23093399    6040  5      11-JAN-07     
22197630    23093399    6040  4      11-JAN-07     
22197630    23093399    6040  3      11-JAN-07     
22197630    23093399    6040  4      19-JAN-06     

回答

6
select CUSTOMER_ID, VEHICLE_ID, DEALER_ID, EVENT_TYPE_ID, 
    max(EVENT_INITIATED_DATE) 
from MyTable 
group by CUSTOMER_ID, VEHICLE_ID, DEALER_ID, EVENT_TYPE_ID 
+1

您键入的速度更快,然后我! – Avitus 2010-05-05 19:21:24

+1

这当然假设Event_initiated_date是日期的数据类型,而不是字符串数据。这不适用于字符串日期,因为排序不同,因此可能返回错误的最大数据。 (或者至少在SQl服务器上,但我敢打赌,它在ORACLE中也有所不同) – HLGEM 2010-05-05 19:40:06

+1

@HLGEM:好的,我的查询确实假定日期数据类型。 – RedFilter 2010-05-05 19:43:46

1

Distinc将无法正常工作。

分组由 - 然后其中一个MAX/MIN等功能为额外的领域。

SELECT CUSTOMER_ID,VEHICLE_ID,MAX(EVENT_INITIATED_DATE)... ... GROUP BY CUSTOMER_ID,VEHICLE_ID

希望帮助;)

0
select CUSTOMER_ID, VEHICLE_ID, DEALER_ID, EVENT_TYPE_ID, 
EVENT_INITIATED_DATE 
from MyTable a 
group by CUSTOMER_ID, VEHICLE_ID, DEALER_ID, EVENT_TYPE_ID, 
EVENT_INITIATED_DATE HAVING EVENT_INITIATED_DATE = 
    (select MAX(EVENT_INITIATED_DATE) from MyTable WHERE CUSTOMER_ID = 
    a.CUSTOMER_ID AND VEHICLE_ID = a.VEHICLE_ID AND DEALER_ID = 
    a.DEALER_ID AND a.EVENT_TYPE_ID = EVENT_TYPE_ID);