Устранение повторяющихся значений на основе только одного столбца таблицы
Мой запрос:
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
Ответы
Ответ 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;