MYSQL COUNT WITH 3 DISTINCT

时间:2017-02-09 16:41:47

标签: mysql

嗨,我有这个VISITS表

enter image description here

我想要实现的目标:

**affiliate_id** **unique visits count** 

167               4
121               1
137               1

特殊条件是单个affiliate_id每天只能计算一次IP。

因此,对于visit_id 553和554,它只能被视为一次访问,因为它们具有相同的IP,相同的日期和相同的affiliate_id。

根据我的理解,我需要按ip,date和affiliate_id分组并计算,但不知道如何编写查询。

你们能指点我一些参考或见解来解决这个问题吗?

提前致谢!

-

使用链接示例SQL更新:

https://dl.dropboxusercontent.com/u/3765168/tb_visits.sql

3 个答案:

答案 0 :(得分:1)

根据您的要求,我认为您需要每个日期的不同ip和affiliate_id

$EventGrab |
    Sort-Object -Property TimeWritten -Descending |
    Where-Object {
        $_.Message -like '*10.1.2.13*' -and
        $_.Message -like '*LTC*'
    } |
    Select-Object TimeWritten, @{n='Account';e={
        Select-String -InputObject $_.Message -Pattern 'Account Name:\s+(.*LTC.*)' |
            Select-Object -Expand Matches |
            ForEach-Object { $_.Groups[1].Value }
    }} |
    ConvertTo-Html |
    Out-File C:\$fileDate

答案 1 :(得分:0)

如果我理解正确,

library(tidyverse)
DF %>%
   select(matches("^OHC"))
#      OHC_1 OHC_2 OHC_3 OHC_6
#Gene1     1     1     0     0
#Gene2     0     0     0     0
#Gene3     1     1     1     1
#Gene4     1     1     1     0

答案 2 :(得分:0)

您要做的是将给定affiliate_id的唯一或不同ip的数量分组,因此您需要的唯一群组是affiliate_id。使用计数计算唯一匹配,然后在添加DISTINCT关键字

时使其唯一
SELECT 
    affiliate_id, COUNT(DISTINCT ip) AS unique_visit_counts, 
FROM tablename
GROUP BY affiliate_id

但是,由于您希望在当天使用它,因此您可能希望包含一个日期子句,例如:

DATE_FORMAT(date, "%y-%m-%d") AS `date` 

这会将你的日期和时间戳变成YY-MM-DD格式的一天。

如果按照分组进行分组,您可以使用类似

之类的内容通过affiliate_id获取完整列表
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

或使用

之类的东西选择特定日期
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
相关问题