Eliminacja zduplikowanych wartości na podstawie tylko jednej kolumny tabeli

Moje zapytanie:

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

Pierwsza część wyjścia:

Tutaj wpisz opis obrazka

Jak mogę usunąć duplikaty w kolumnie siteName? Chcę zostawić tylko zaktualizowaną na podstawie date kolumny.

W powyższym przykładzie potrzebuję wierszy 1, 3, 6, 10

Author: Ned, 2013-07-07

2 answers

Tutaj przydaje się funkcja okna 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
 21
Author: Gordon Linoff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-06 23:09:44

Z twojego przykładu wydaje się rozsądne założenie, że kolumna siteIP jest określona przez kolumnę siteName (czyli każda strona ma tylko jedną siteIP). Jeśli tak jest, to istnieje proste rozwiązanie za pomocą 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;

Jeśli jednak moje założenie nie jest poprawne (tzn. możliwe jest, że strona ma wiele siteIP), to nie jest jasne, z którego siteIP chcesz, aby zapytanie zwróciło się w drugiej kolumnie. Jeśli tylko siteIP, to następujące zapytanie będzie do:

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;
 8
Author: Mikhail Makarov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-07 01:41:32