首页 > 解决方案 > 如何计算每个日期的行数?

问题描述

我有一张桌子:

id | reg_date
 1 | 01-02-2019
 2 | 01-02-2019
 3 | 01-02-2019
 4 | 02-02-2019
 5 | 02-02-2019
 6 | 03-02-2019

我需要计算每个日期的行数(在我的例子中是新用户):

count | reg_date
    3 | 01-02-2019
    5 | 02-02-2019
    6 | 03-02-2019

我的查询是:

SELECT @cnt:=@cnt+count AS count, reg_date
  FROM (
    SELECT COUNT(*) AS count, reg_date
      FROM users, (select @cnt:=0) x
     group by reg_date
  ) x
 order by reg_date

但是如何计算某个日期的行数?例如,最后一天\一周。

count | reg_date
    6 | 03-02-2019

谢谢!:)

标签: mysqlsql

解决方案


如果您使用的是 MySQL 8,则可以使用row_number()窗口函数来计算计数:

SELECT max(rn) AS count, reg_date
FROM (SELECT row_number() OVER (ORDER BY reg_date) AS rn
           , reg_date
      FROM users) AS x
GROUP BY reg_date
ORDER BY reg_date;
count       reg_date  
----------  ----------
3           2019-01-02
5           2019-02-02
6           2019-03-02

db<>小提琴示例


推荐阅读