Подход, основанный на объединении, не имеет этой проблемы и сохранит все записи, привязанные к максимальному доходу на данную дату.
SELECT t1.*
FROM yourTable t1
INNER JOIN
(
SELECT date, MAX(income) AS max_income
FROM yourTable
GROUP BY date
) t2
ON t1.date = t2.date AND t1.income = t2.max_income
ORDER BY
t1.date;
Способ работы вышеуказанного запроса состоит в том, чтобы объединить полный оригиналтаблица подзапроса, которая находит для каждой даты максимальное значение дохода.Это приводит к фильтрации любой записи, которая не имела максимального дохода на данную дату.Обратите особое внимание на условие соединения, которое состоит из двух компонентов: даты и дохода.
Если ваша база данных поддерживает аналитическую функцию, мы также можем использовать RANK
здесь:
SELECT date, ID, income
FROM
(
SELECT t.*, RANK() OVER (PARTITION BY date ORDER BY income DESC) rnk
FROM yourTable t
) t
WHERE rnk = 1
ORDER BY date;