mysql - 在 MySQL Workbench 上按月运行 SQL 查询?

标签 mysql date cumulative-sum

我目前正在使用 MySQL Workbench 开发 MySQL 数据库。

我的目标是从数据库中检索注册情况,以便在 Excel 电子表格上建立我公司的 KPI。

我编写了一些有效的 SQL 查询,但我想设置一个非常完整的查询,以避免使用 xxx 不同的查询。

要获得每个月的注册量(基于“created_at”),这使得工作:

SELECT year(u.created_at) year, monthname(u.created_at) month, COUNT(DISTINCT u.id) as 'New shoppers signups' 
FROM users u
GROUP BY year, month
ORDER BY u.created_at

但我还想每个月之前的注册总数

Jan : 12
Feb : 14 (12 + 2 new signups)
March : 22 (14 + 8 new signups)
... 

我在哪里获得所有先前注册的总和

我在想这样的事情:

DECLARE @month = '2012-01-01' //startdate
WHILE @month < curdate() 
BEGIN
    SELECT count(distinct u.id)
    WHERE u.created_at < @month
    dateadd(month, 1, @month) // incrementing to next month
END

但是 while 循环、声明、设置或日期函数在 MySQL Workbench 上都不起作用。

我听说我必须申报程序,但我没有再成功......

我知道我可以使用 Excel 来获得结果,但我想改进我对 SQL 的使用,并使这成为一项非常清晰的工作。

最佳答案

您实际上已经接近答案了。获取您的结果并将其作为内部查询。这是使用 MySQL 变量累积每一行的外部查询的基础。

select
      pq.yearAdded, 
      pq.monthAdded, 
      pq.NewShoppers as 'New shoppers signups',
      @runBal := @runBal + pq.NewShoppers as TotalNewShoppers
   from
      ( SELECT 
              year(u.created_at) yearAdded, 
              monthname(u.created_at) monthAdded, 
              COUNT(DISTINCT u.id) as NewShoppers
           from
              users u
           GROUP BY 
              year(u.created_at), 
              monthname(u.created_at)
           ORDER BY 
              year(u.created_at), 
              monthname(u.created_at) ) pq,
      ( select @runBal := 0 ) sqlvars

我只是建议列名称远离可能的保留字,例如年、月和其他标准 SQL 命令和函数名称...否则您通常需要在列名称周围添加刻度线

关于mysql - 在 MySQL Workbench 上按月运行 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35039193/

相关文章:

python - 字典中的累积分布

mysql - 我用于检查国家/地区名称的 SQL 查询受到限制

javascript - jQuery.jgrid.parseDate 日期格式化

date - Pandas - 将 HH :MM:SS. F 字符串转换为秒 - 警告:HH 有时会超过 24H

Java Calendar.DAY_OF_WEEK 给出了错误的一天

mysql - 从 MySQL 表中获取累计总和

r - 使用 for 循环的累积和方程

mysql - Ruby mysql gem - 如何在查询时避免日期时间自动转换为字符串

javascript - mysql中可以存储字符串格式的数组吗?

php - 硬 SQL 查询