Witam Mam tę tabelę WIZYT
Co chcę osiągnąć:
**affiliate_id** **unique visits count**
167 4
121 1
137 1
Warunek specjalny to jeden adres IP, który można zliczyć tylko raz dziennie dla pojedynczego numeru afiliacyjnego.
Tak więc dla visit_id 553 i 554, może to być liczone tylko jako jedna wizyta, ponieważ obie mają takie same ip, tę samą datę i ten sam numer partnera.
Z tego co rozumiem muszę pogrupować według ip, date i affiliate_id i policzyć, ale nie wiem jak napisać zapytanie.
Czy możecie wskazać mi jakieś odniesienie lub wgląd, aby rozwiązać ten problem?
Z góry dziękuję!
--
Zaktualizuj za pomocą przykładowego kodu SQL:
https://dl.dropboxusercontent.com/u/3765168/tb_visits.sql
Odpowiedzi:
0 dla odpowiedzi № 1Jeśli rozumiem poprawnie,
SELECT affiliate_id, count(*)
FROM (SELECT DISTINCT affiliate_id, ip, DAY(date)
FROM visits) AS q
GROUP BY affiliate_id;
1 dla odpowiedzi nr 2
Biorąc pod uwagę twoje wymagania, myślę, że potrzebujesz odrębnego adresu IP na datę i identyfikator partnera
select DATE(date), affiliate_id, count(distinct( ip))
from your_table
group by DATE(date), affiliate_id
0 dla odpowiedzi № 3
Co próbujesz zrobić, to zgrupować liczbę unikalnych lub różnych IP dla danego affiliate_id
więc jedyną potrzebną grupą jest affiliate_id
. Wyjątkowe trafienia są obliczane na podstawie liczby i sprawiają, że unikatowe dodajesz DISTINCT
słowo kluczowe
SELECT
affiliate_id, COUNT(DISTINCT ip) AS unique_visit_counts,
FROM tablename
GROUP BY affiliate_id
Jednak skoro chcesz tego również z dnia na dzień, możesz dodać klauzulę daty, taką jak:
DATE_FORMAT(date, "%y-%m-%d") AS `date`
Która zmieni datę i godzinę w jeden dzień w formacie YY-MM-DD.
Jeśli zgrupujesz według tego, możesz uzyskać pełną listę według dnia, przez affiliate_id, używając czegoś podobnego
SELECT
affiliate_id,
COUNT(DISTINCT ip) AS unique_visit_counts,
DATE_FORMAT(date, "%y-%m-%d") AS `date`
FROM tablename
GROUP BY `date`, affiliate_id
Lub wybierz konkretną datę, używając czegoś podobnego
SELECT
affiliate_id,
COUNT(DISTINCT ip) AS unique_visit_counts,
FROM tablename
WHERE DATE_FORMAT(date, "%y-%m-%d") = "17-02-08"
GROUP BY affiliate_id