Подтвердить что ты не робот

Устранение повторяющихся значений на основе только одного столбца таблицы

Мой запрос:

SELECT sites.siteName, sites.siteIP, history.date
FROM sites INNER JOIN
     history ON sites.siteName = history.siteName
ORDER BY siteName,date

Первая часть вывода:

enter image description here

Как удалить дубликаты в столбце siteName? Я хочу оставить только обновленный, основанный на столбце date.

В примере выше, мне нужны строки 1, 3, 6, 10

4b9b3361

Ответ 1

Здесь функция окна row_number() пригодится:

SELECT s.siteName, s.siteIP, h.date
FROM sites s INNER JOIN
     (select h.*, row_number() over (partition by siteName order by date desc) as seqnum
      from history h
     ) h
    ON s.siteName = h.siteName and seqnum = 1
ORDER BY s.siteName, h.date

Ответ 2

Из вашего примера представляется разумным предположить, что столбец siteIP определяется столбцом siteName (то есть каждый сайт имеет только один siteIP). Если это действительно так, то существует простое решение с использованием group by:

select
  sites.siteName,
  sites.siteIP,
  max(history.date)
from sites
inner join history on
  sites.siteName=history.siteName
group by
  sites.siteName,
  sites.siteIP
order by
  sites.siteName;

Однако, если мое предположение неверно (т.е. сайт может иметь несколько siteIP), то из вас не ясно, какой siteIP вы хотите, чтобы запрос возвращался во второй колонка. Если только любой siteIP, тогда будет выполняться следующий запрос:

select
  sites.siteName,
  min(sites.siteIP),
  max(history.date)
from sites
inner join history on
  sites.siteName=history.siteName
group by
  sites.siteName
order by
  sites.siteName;