我想要这样的东西
mysql数据
(dat_reg)
1.1.2000
1.1.2000
1.1.2000
2.1.2000
2.1.2000
3.1.2000
我想得到:
(dat_reg) (count)
1.1.2000 - 3
2.1.2000 - 5
3.1.2000 - 6
我尝试的是:
SELECT COUNT( * ) as a , DATE_FORMAT( dat_reg, '%d.%m.%Y' ) AS dat
FROM members
WHERE (dat_reg > DATE_SUB(NOW() , INTERVAL 5 DAY))
GROUP BY DATE_FORMAT(dat_reg, '%d.%m.%Y')
ORDER BY dat_reg
但我得到:
1.1.2000 - 3 | 2.1.2000 - 2 | 3.1.2000 - 1
如何为此创建查询的一些技巧?
4条答案
按热度按时间2nbm6dog1#
我建议在mysql中使用变量:
如果要从时间开始累计,则需要一个附加的子查询:
tcomlyy62#
我相信你可以使用窗口功能来完成这项工作:
在您的情况下,您已经拥有了正确的组,只需指定数据聚合的顺序即可。
资料来源:https://mysqlserverteam.com/mysql-8-0-2-introducing-window-functions/
干杯
mv1qrgav3#
计算注册日期小于或等于当前注册日期的行的子查询可以帮助您解决此问题。
(如果有天没有人注册,并且不想在结果中出现空白,则需要替换别名的子查询
m2
对于表或子查询,其所有日期都在各自的范围内。)7kqas0il4#
以下是使用秩和连续计数变量的解决方案:
小提琴