Вам нужно сделать одну из двух вещей ...
- GROUP BY и использовать агрегатные функции для консолидации нескольких записей до одной
- Использовать некоторый поиск для идентификации одной записивы хотите из группы
В вашем случае вам не нужен просто MAX () из таблицы1, так как может бытьВозможно, что более высокий id
имеет более низкий date
.В этом случае я был бы склонен использовать поисковую систему ...
WITH
ordered_table1 AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY id ORDER BY date_field DESC) AS sequence_number,
*
FROM
table1
)
SELECT
*
FROM
ordered_table1
INNER JOIN
table2
ON table2.id = ordered_table1.id
WHERE
ordered_table1.sequence_id = 1
ПРИМЕЧАНИЕ: Это предполагает, что ваша дата отформатирована так, что буквенно-цифровой порядок приведет к правильному порядку даты,Если это НЕ тот случай (и d-m-yyyy
будет не правильно заказывать), вам нужно заменить date_field
на TO_DATE(date_field)
, чтобы обеспечить правильный порядок.
ПРИМЕЧАНИЕ: Использование TO_DATE(date_field)
также, вероятно, решит ваши проблемы MAX ().
ПРИМЕЧАНИЕ: Если вы хотите сохранить даты в виде строк, но ихчтобы сделать заказ дружественным, используйте yyyy-mm-dd