Mam tabelę zawierającą kolumny Email, Ip, State, City, TimeStamp, Id
Muszę liczyć, gdzie adresy e-mail i adres IP są różne, według grup
Więc kiedy uruchamiam kwerendę MYSQL,
select State, City ,count(distinct( Email )), count(DISTINCT( IP))
from table
group by Stat, City
Daje mi różne, ale nie ORAZ
Potrzebuję liczby odrębnych wiadomości e-mail i & Distinct IP; pogrupowane według państwa, miasta.
I nie może być w grupie, musibyć pierwszym wystąpieniem EMAIL i pierwszym wystąpieniem adresu IP w całej bazie danych. Więc jeśli mogę go rozwinąć i dodać parametr daty, mimo że wybieram konkretną datę, nadal mogę sprawdzić całą bazę danych dla unikalnych.
Więc jeśli potrzebuję
select state, city, count ( distinct ( IP ) , count ( distinct ( EMAIL ))
from table
where timestamp > date(2014-12-01)
group by state, city
Jakiego rodzaju jest to zapytanie? I jak mogę to zrobić?
Moje jelito mówi mi, że muszę zrobić CONCAT zgodnie z sugestią, ale także inny wybór w środku. Wybierz więc całą bazę danych różniącą się od adresu IP, a następnie wybierz konkretne kryteria z drugiego wyboru.
Odpowiedzi:
0 dla odpowiedzi № 1To może trochę pomóc w uzyskaniu "wyraźnego (A && B)"
SELECT DISTINCT (CONCAT (A, "_", B)), C, D Z tabeli GROUP BY C, D
0 dla odpowiedzi nr 2
Próbowaliśmy to zrobić na serwerze produkcyjnymi okazało się, że wymagane zapytanie wymagało zbyt dużego nakładu zasobów. Stworzyliśmy więc tabelę z aktualizacją pierwszej instancji, w której występuje element, a następnie sprawdzamy liczniki za pomocą sprzężenia:
select count(a.State) from tablename A
inner join table_update U
on a.id = u.id
WHERE a.parameters..
and c.first_email = 1
and c.first_ip = 1
Nie mogliśmy znaleźć pojedynczego stolika, który nie przyniósłby naszego serwera z 400 000 rekordów. Nie jest to odpowiedź klasyczna, ale to, czego musieliśmy użyć.