Исключение повторяющихся значений поля PostgreSQL
Имеется следующий запрос
with H as (Select distinct (REGEXP_MATCHES("Msg", ('\.*\d+\.\d+\.\d+\.\d+')))[1] as ip, "Dt"::date as visitdate
from public."Log")
Select ROW_number() over() as id, count(distinct h.ip), h.visitdate
from H
WHERE h.visitdate >= dateFrom AND h.visitdate < dateTo+1 GROUP BY h.visitdate ORDER BY h.visitdate desc;
В результирующем наборе H есть повторяющиеся IP. Как можно удалить из H записи, где IP повторяются вне зависимости от даты?
Ответы (1 шт):
Автор решения: Montana
→ Ссылка
Решением стало использование агрегирующей функции min() на поле "Dt" в CTE. Т.е мы возвращаем минимальную дату, которой соответствует IP.
В итоге запрос стал таким
with H as (Select (REGEXP_MATCHES("Msg", ('\.*\d+\.\d+\.\d+\.\d+')))[1] as ip, min("Dt")::date as visitdate
from public."Log")
Select ROW_number() over() as id, count(distinct h.ip), h.visitdate
from H
WHERE h.visitdate >= dateFrom AND h.visitdate < dateTo+1 GROUP BY h.visitdate ORDER BY h.visitdate desc;
На выходе получаем поля id, ip и visitdate, в которую этот ip встретился впервые.