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; 
Другие вопросы по тегам