У меня есть 1 таблица базы данных, которая имеет список рекламных объявлений. Я пытаюсь захватить ПОСЛЕДНЮЮ рекламу для КАЖДОГО курорта . Я знаю, что это, вероятно, должна быть база данных таблиц, но как я могу это сделать.
select t.* from YourTable t join (select resort, max(dateAdded) dateAdded from YourTable group by resort) m on t.dateAdded = m.dateAdded and t.resort = m.resort order by t.resort
Первой группе строк, чтобы найти максимальное значение dateAdded, затем запросить (объединить) строки, которые имеют ту же датуAdded с макс.
Одна из проблем заключается в том, что если один и тот же курорт b добавляется за одно и то же время, два или более, он займет только первую строку. Но я думаю, что это немного возможно.
Предположим, что столбец Id уникален:
SELECT T3.* FROM yourtable AS T3 JOIN ( SELECT T2.resort, T2.date_added, MAX(T2.id) AS id FROM yourtable AS T2 JOIN ( SELECT resort, MAX(date_added) AS date_added FROM yourtable GROUP BY resort ) AS T1 ON T1.resort = T2.resort AND T1.date_added = T2.date_added GROUP BY T2.resort, T2.date_added ) AS T4 ON T4.id = T3.id
Взгляните на эту статью, чтобы выбрать элемент «максимум» (например, самая последняя дата) из группы элементов.
Использовать функцию GROUP BY
SELECT MAX(dateAdded), resort, linkToUrl FROM `your_table` GROUP BY resort
Я думаю, это должно сделать это:
SELECT * FROM advertisements GROUP BY resort ORDER BY dateAdded DESC