我有以下查询:
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
答案 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的独特计数决定了点击次数。然后,我们可以对此中间表进行子查询,并总结所有日期的点击次数,包括当前日期。这实际上是游标样式操作,可以替换你对会话变量的使用。