Я думаю, что это будет делать то, что вы хотите:
SELECT CUSTOMER, MAX(LAST_UPDATED) as Latest_Date,
SUM(TOTAL) KEEP (DENSE_RANK FIRST ORDER BY LAST_UPDATED DESC) as Revenue
FROM CD_DATA
GROUP BY CUSTOMER;
Тем не менее, я настороженно отношусь к Oracle и DATE
s, потому что метка времени даты может иметь компонент времени. Итак, чтобы получить последнюю дату , вам может понадобиться:
SELECT CUSTOMER, MAX(LAST_UPDATED) as Latest_Date,
SUM(TOTAL) KEEP (DENSE_RANK FIRST ORDER BY TRUNC(LAST_UPDATED) DESC) as Revenue
FROM CD_DATA
GROUP BY CUSTOMER;
Или:
SELECT CUSTOMER, MAX(LAST_UPDATED),
SUM(REVENUE)
FROM (SELECT d.*,
RANK() OVER (PARTITION BY CUSTOMER ORDER BY TRUNC(LAST_UPDATED) DESC) as seqnum
FROM CD_DATA d
) d
WHERE seqnum = 1
GROUP BY CUSTOMER;