Если я правильно понимаю, для каждого рассматриваемого LINE_ITEM_ID
вы хотите вернуть только тот, который имеет наибольшее значение для SID
. Это общее требование, и, как и в большинстве случаев в SQL, его можно записать разными способами; наилучшая производительность будет зависеть от многих факторов, не в последнюю очередь от того, какой продукт SQL вы используете.
Вот один из возможных подходов:
SELECT DISTINCT * -- use a column list
FROM YourTable AS T1
INNER JOIN (
SELECT T2.LINE_ITEM_ID,
MAX(T2.SID) AS max_SID
FROM YourTable AS T2
GROUP
BY T2.LINE_ITEM_ID
) AS DT1 (LINE_ITEM_ID, max_SID)
ON T1.LINE_ITEM_ID = DT1.LINE_ITEM_ID
AND T1.SID = DT1.max_SID;
Тем не менее, я не помню, чтобы видел тот, который опирается на UNION
реляционный оператор. Вы можете легко переписать вышесказанное, используя реляционный оператор INTERSECT
, но это будет более многословно.