ID int(11) (NULL) NO PRI (NULL)
CREATED_DATE datetime (NULL) YES (NULL)
如上所述是我的表'User'中的一些字段。我想要按日期分组的总用户数和累计数。我在mysql中使用以下查询。
SELECT q1.CREATED_DATE,q1.NO_OF_USER, (@runtot := @runtot + q1.NO_OF_USER) AS CUMM_REGISTRATION FROM (SELECT date(CREATED_DATE) AS CREATED_DATE,
COUNT(ID) AS NO_OF_USER FROM USER,(SELECT @runtot:=0) AS n GROUP BY CREATED_DATE ORDER BY CREATED_DATE) AS q1
哪个工作正常。现在我想要一个额外的数据,这将是'8月1日以来的累积用户数'。是否有可能获取上述修改上面的查询或更好地处理代码?请建议。
答案 0 :(得分:1)
您可以通过添加另一个变量并在代码中执行此操作来完成此操作:
SELECT q1.CREATED_DATE, q1.NO_OF_USER,
(@runtot := @runtot + q1.NO_OF_USER) AS CUMM_REGISTRATION,
@Aug1tot := if(CREATED_DATE >=date('2013-08-01'), @Aug1tot + q1.NO_OF_USER, NULL) as CUMM_SINCE_Aug1
FROM (SELECT date(CREATED_DATE) AS CREATED_DATE,
COUNT(ID) AS NO_OF_USER
FROM USER cross join
(SELECT @runtot:=0, @Aug1tot := 0) n
GROUP BY date(CREATED_DATE)
ORDER BY date(CREATED_DATE);
) AS q1
答案 1 :(得分:0)
我猜你在mySQL中有一些名为MONTH(yourDate)的函数,其中MONTH(2013年8月15日)将返回8。
您可以按MONTH(yourDate)对结果进行分组,也可以过滤MONTH(yourDate)= 8的原始数据。请注意,如果您的数据沿多年运行,因为将累计月份= 8的所有日期。然后,您可以根据YEAR(yourDate)
添加排序/过滤标准