Решение для оконных функций должно быть наиболее эффективным и привести к сканированию только одной таблицы или индекса.Я думаю, что тот, который я публикую здесь, выигрывает за интуитивность и простоту понимания.Я проверил на сервере SQL, и он выполнил функции 2-го к окну, что привело к двум просмотрам индекса.
SELECT T1.monitor_id, T1.calibration_date, T1.value
FROM someTable AS T1
WHERE NOT EXISTS
(
SELECT *
FROM someTable AS T2
WHERE T2.monitor_id = T1.monitor_id AND T2.value > T1.value
)
GROUP BY T1.monitor_id, T1.calibration_date, T1.value
И, черт возьми, вот еще один аналогичный пример, но менее производительный (63%Стоимость против 37%), чем другие (опять же на сервере SQL).В этом плане используется левое внешнее объединение в плане выполнения, в котором в качестве первого используется соединение с анти-полуслияниями:
SELECT T1.monitor_id, T1.calibration_date, T1.value
FROM someTable AS T1
LEFT JOIN someTable AS T2 ON T2.monitor_id = T1.monitor_id AND T2.value > T1.value
WHERE T2.monitor_id IS NULL
GROUP BY T1.monitor_id, T1.calibration_date, T1.value