【问题标题】:How to select distinct ip for each day如何为每一天选择不同的ip
【发布时间】:2016-08-24 09:17:46
【问题描述】:

我有一个名为 logvisit 的表,其中的字段包括 ip (varchar(30))date (datetime)

ip    date
1.1   2016-08-23 00:05:40
1.1   2016-08-24 00:05:15
1.1   2016-08-24 00:05:20
1.2   2016-08-22 00:01:00
1.2   2016-08-22 00:00:30
1.2   2016-08-23 00:01:00

EDIT :我想按 DAY 选择所有不同的 ip。一个IP可以有几天(如果用户连续三天来),一天可以有几个IP(因为我有多个用户)。我只是不想在同一天使用相同的IP。

预期产出(1 ip / 1 天):

ip    day
1.1   2016-08-23
1.1   2016-08-24
1.2   2016-08-22
1.2   2016-08-23

我找到了这个帖子SQL group by day, with count,所以我一开始就尝试了:

SELECT 
  Convert(char(8), date, 112),
  count(distinct ip)
FROM logvisit
GROUP BY Convert(char(8), date, 112)

这给了我一个意外的“112 附近的语法错误”,count(distinct ip"..

【问题讨论】:

    标签: mysql count distinct


    【解决方案1】:

    您需要同时按ip & date分组

    SELECT 
      DATE(date) AS d,
      count(ip)
    FROM logvisit
    GROUP BY d,ip
    

    注意:Date(time_stamp/datetime) 将提取日期部分。


    如果您想每天计算不同的 ip,则可以使用以下查询:

    SELECT 
      DATE(date) AS d,
      count(distinct ip) AS dayWiseDistinctIpCount
    FROM logvisit
    GROUP BY d
    

    编辑:

    为了得到不同的<ip,day>

    SELECT 
     DISTINCT ip,
     DATE(date) AS day
    FROM logvisit
    

    【讨论】:

    • 对不起,我误导了你。您的回答在语法上是正确的,但我每天只有一个 IP。我需要的是每天都有不同的 ip,而不仅仅是每个不同的日子一个 ip(请参阅我在帖子中的编辑)
    【解决方案2】:
    SELECT DISTINCT ip, DATE(DATE) as day FROM logvisit GROUP BY DATE(DATE),ip
    

    【讨论】:

      【解决方案3】:

      试试这样的:

      SELECT id, DATE(`date`) AS day, COUNT(DISTINCT ip) AS total_visits
      FROM logvisit
      GROUP BY DATE(`date`);
      

      【讨论】:

      • 对不起,我误导了你。您的回答在语法上是正确的,但我每天只有一个 IP。我需要的是每天都有不同的 ip,而不仅仅是每个不同的日子一个 ip(请参阅我在帖子中的编辑)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2022-01-18
      • 2012-01-04
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      相关资源
      最近更新 更多