SQL: фильтр по одному столбцу, затем выберите максимальную метку времени для результатов
String stmt1 = "SELECT * FROM mytable WHERE created=(SELECT MAX(created)";
String stmt2 = "SELECT * FROM mytable WHERE source=somesource";
Я хотел бы объединить эти два утверждения. У меня есть три источника, и я хотел бы, чтобы последний созданный экземпляр для каждого источника (с использованием трех отдельных запросов).
Есть ли способ выбрать все элементы из источника и ПОТОМ получить самую последнюю временную метку?
Спасибо.
2 ответа
Решение
Стандартный способ сделать это с помощью ANSI SQL row_number()
(который поддерживается практически всеми базами данных, включая Hana):
SELECT t.*
FROM (SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY source ORDER BY created DESC) as seqnum
FROM mytable t
) t
WHERE seqnum = 1;
Вы можете использовать GROUP BY в mysql для группировки некоторого столбца с условием WHERE, например:
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
В твоем случае:
SELECT MAX(created)as date,* FROM mytable WHERE source=somesource GROUP BY created;