Что такое оператор SQL, который удаляет дубликаты, но сохраняет данные дополнительного столбца? - PullRequest
3 голосов
/ 05 мая 2010

Я хотел бы знать, каким должен быть оператор SQL (для СУБД ORACLE), который будет возвращать уникальные (по CUSTOMER_ID, VEHICLE_ID, DEALER_ID и EVENT_TYPE_ID) строки, НО он также вернет самую последнюю дату (EVENT_INITIATED_DATE) для этой строки , Я пробовал DISTINCT и GROUP BY, но не смог понять, как обрабатывать EVENT_INITIATED_DATE (это тип данных DATE).

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                 

Ответы [ 3 ]

6 голосов
/ 05 мая 2010
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 голос
/ 05 мая 2010

Distinc не будет работать.

Группировка по - и затем одна из функций MAX / MIN и т. Д. Для дополнительных полей.

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

Надеюсь, это поможет;)

0 голосов
/ 13 июля 2015
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 );
...