/ / LICZBA MYSQL Z 3 DISTINCT - mysql

LICZBA MYSQL Z 3 DISTINCT - mysql

Witam Mam tę tabelę WIZYT

wprowadź opis obrazu tutaj

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 № 1

Jeś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