有个数据表,大概100W条记录,字段:手机号,产品ID,日期(2018-01-01 13:22:42),其他
现在给定2个输入:
1.时间范围,如:60秒内
2.出现X次的记录数,如:5次需求描述,请提供60秒内,同一个用户出现5次及以上记录的数据。求大神解救!!!

解决方案 »

  1.   

    不知道是不是这个意思,你自己试试看。
    SET @d := 60 ; -- 60秒
    SET @c := 5 ; -- 5次
    SELECT
      t.手机号,
      t.产品ID,
      t.日期
    FROM
      (SELECT
        t.*,
        (SELECT
          COUNT(0)
        FROM
          table_name t1
        WHERE t1.日期 BETWEEN t.日期
          AND DATE_ADD(t.日期, INTERVAL + @d SECOND)
          AND t1.手机号
          AND t.手机号
          AND t1.产品ID = t.产品ID -- 如果一个手机号码,就可以代表一个用户,请把这行去掉。
          ) c
      FROM
        table_name t) t.c >= @c;
      

  2.   

    试试这个看
    SET @d := 60 ; -- 60秒
    SET @c := 5 ; -- 5次
    SELECT
      t.手机号,
      t.产品ID,
      t.日期
    FROM
      (SELECT
        t.*,
        (SELECT
          COUNT(0)
        FROM
          table_name t1
        WHERE t1.日期 BETWEEN DATE_ADD(t.日期, INTERVAL - @d SECOND)
          AND DATE_ADD(t.日期, INTERVAL + @d SECOND)
          AND t1.手机号
          AND t.手机号
          AND t1.产品ID = t.产品ID -- 如果一个手机号码,就可以代表一个用户,请把这行去掉。
          ) c
      FROM
        table_name t) t.c >= @c;