Если мы хотим вернуть самое последнее datetime
для каждого отдельного значения name
, нормативным шаблоном будет:
SELECT t.name
, MAX(t.datetime) AS latest_datetime
FROM requests t
GROUP
BY t.name
ORDER
BY ...
Если кортеж (name,datetime)
гарантированно будет уникальным, мыможно получить строку с самым последним временем, присоединив результат запроса выше к таблице
SELECT r.id
, r.name
, r.datetime
FROM ( SELECT t.name
, MAX(t.datetime) AS latest_datetime
FROM requests t
GROUP
BY t.name
) s
JOIN requests r
ON r.name <=> s.name
AND r.datetime <=> s.latest_datetime
ORDER
BY ...
Если кортеж (name,datetime)
не является уникальным, то запрос выше потенциально может вернуть несколько строк содинаковые значения name
и datetime
.Есть подходы к решению этой проблемы;учитывая определение таблицы запросов, проще всего было бы обернуть столбец id
в агрегат и добавить предложение GROUP BY во внешний запрос ...
SELECT MIN(r.id) AS id
, r.name
, r.datetime
FROM ( SELECT t.name
, MAX(t.datetime) AS latest_datetime
FROM requests t
GROUP
BY t.name
) s
JOIN requests r
ON r.name <=> s.name
AND r.datetime <=> s.latest_datetime
GROUP
BY r.name
, r.datetime
ORDER
BY ...