mysql

时间:2018-02-05 08:56:45

标签: mysql

我有以下查询:

set @cumulativeSum := 0;
select
  (@cumulativeSum:= @cumulativeSum + (count(distinct `ce`.URL, `ce`.`IP`))) as `uniqueClicks`,
  cast(`ce`.`dt` as date) as `createdAt`
from (SELECT DISTINCT min((date(CODE_EVENTS.CREATED_AT))) dt, CODE_EVENTS.IP, CODE_EVENTS.URL
      FROM CODE_EVENTS
      GROUP BY CODE_EVENTS.IP, CODE_EVENTS.URL) as ce
      join ATTACHMENT on `ce`.URL = ATTACHMENT.`ID`
where ATTACHMENT.`USER_ID` = 6
group by cast(`ce`.`dt` as date)
  ORDER BY ce.URL;

它几乎可以正常工作,我希望将结果集的日期和累计金额设置为uniqueClicks,问题是在我的结果集中它没有加在一起。

uniqueClicks createdAt
1            2018-02-01
3            2018-02-03
1            2018-02-04

我希望

uniqueClicks createdAt
1            2018-02-01
4            2018-02-03
5            2018-02-04

1 个答案:

答案 0 :(得分:1)

我相信您可以获得唯一点击的滚动总和,而无需求助于动态SQL:

SELECT
    t1.CREATED_AT,
    (SELECT SUM(t2.uniqueClicks) FROM
     (
         SELECT CREATED_AT, COUNT(DISTINCT IP, URL) uniqueClicks
         FROM CODE_EVENTS
         GROUP BY CREATED_AT
     ) t2
     WHERE t2.CREATED_AT <= t1.CREATED_AT) uniqueClicksRolling
FROM
(
    SELECT DISTINCT CREATED_AT
    FROM CODE_EVENTS
) t1
ORDER BY t1.CREATED_AT;

子查询别名为t2,计算表格中显示的每个给定日期的唯一点击次数。 IP和URL的独特计数决定了点击次数。然后,我们可以对此中间表进行子查询,并总结所有日期的点击次数,包括当前日期。这实际上是游标样式操作,可以替换你对会话变量的使用。