Я бы создал таблицу, в которой хранятся уникальные представления:
CREATE TABLE unique_views(
page_id number,
user_agent varchar2(500),
ip_address varchar2(16),
access_time date,
PRIMARY KEY (page_id, user_agent, ip_address, access_time)
)
Теперь, если кто-то заходит на страницу и вы хотите разрешить один просмотр на пользователя в день, вы можете сделать
INSERT INTO unique_views (:page_id, :user_agent, :ip_address, trunc(SYSDATE, 'day'))
, что не позволит дублировать просмотры для одного и того же пользователя в течение одного дня. Затем вы можете подсчитать количество просмотров для каждой страницы с помощью простого GROUP BY (пример для сегодняшних просмотров):
SELECT page_id, count(*) page_views
FROM unique_views
WHERE access_time = trunc(SYSDATE, 'day')
GROUP BY page_id