ROW_NUMBER()
- прекрасный способ решить эту проблему.В некоторых случаях вы можете получить более высокую производительность, используя:
INSERT INTO FNL_PROF_BID_ID_W2 (CUST_ORD_NBR, STR_LOC_ID, PROF_BID_ID)
SELECT PB.CUST_ORD_NBR, PB.LOC_NBR, PB.PROF_BID_ID
FROM PROF_BID PB
WHERE PB.PROF_BID_ID = (SELECT MAX(PB2.PROF_BID_ID)
FROM PROF_BID PB
WHERE PB2.CUST_ORD_NBR = PB.CUST_ORD_NBR AND PB2.LOC_NBR = PB.LOC_NUMBER
);
Это предполагает, что PROF_BID_ID
уникален, то есть вам не нужен второй ключ для уникальной идентификации строки (что разумно, учитываясоглашения об именах).
В частности, это может оптимально использовать индекс для (CUST_ORD_NBR, LOC_NUMBER, PROF_BID_ID)
.
. Следует подчеркнуть, что нет ничего плохого в использовании ROW_NUMBER()
для этой цели..
Также может быть достаточно сделать:
INSERT INTO FNL_PROF_BID_ID_W2 (CUST_ORD_NBR, STR_LOC_ID, PROF_BID_ID)
SELECT PB.CUST_ORD_NBR, PB.LOC_NBR, MAX(PB.PROF_BID_ID)
FROM PROF_BID PB
GROUP BY PB.CUST_ORD_NBR, PB.LOC_NBR;