MySQL:如何做日报?

Sta*_*bie 1 php mysql database

假设我有一些东西.每条记录都有一个格式的时间戳(MySQL数据类型TIMESTAMP)date('Y-m-d H:i:s')(来自PHP).我需要生成一个如下所示的报告:

===========================================
| Date                  | Total Sales     |
===========================================
| Thursday, Dec 1, 2011 | 100             |
-------------------------------------------
| Friday, Dec 2, 2011   | 200             |
-------------------------------------------
| Saturday, Dec 3, 2011 | 150             |
-------------------------------------------
... and so on ...
Run Code Online (Sandbox Code Playgroud)

我假设我必须从PHP动态构建SQL,这没关系.我只是不确定SQL会是什么样子.想法?

Ans*_*son 8

如何计算每天的记录数

这是我原本以为你想要的.我将它留在这里,因为它可能对其他人有用.

你有一堆时间戳.您希望按个别日期对它们进行分组,并获取每天的记录数.

假设您的timestamp字段已命名ts,您可以执行以下操作:

SELECT COUNT(*), DAY(ts), MONTH(ts), YEAR(ts) FROM tableName
       GROUP BY YEAR(ts), MONTH(ts), DAY(ts);
Run Code Online (Sandbox Code Playgroud)

如何为个人生成每日报告

好的,这就是你真正想要的.让我们绘制一个包含一些记录的示例表:

ts                      person         sales
2011-12-01 10:00:00     John           10
2011-12-01 10:30:00     Mary           25
2011-12-01 11:00:00     John           20
2011-12-02 14:00:00     John           40
Run Code Online (Sandbox Code Playgroud)

要获得特定人员的每日总数,您可以:

SELECT SUM(sales), DAY(ts), MONTH(ts), YEAR(ts) FROM tableName
       WHERE person='John'
       GROUP BY YEAR(ts), MONTH(ts), DAY(ts);
Run Code Online (Sandbox Code Playgroud)

这是选择personJohn 所在的记录,按唯一天数分组,并对sales这些记录的值求和.如果您希望将每个人的报告合并在一起,只需删除该WHERE子句即可.

最后的说明

如果使用DATE类型而不是类型,则可以稍微简化SQL DATETIME.我正在选择和分组日,月和年,我需要使用三个单独的功能.如果您正在使用该DATE类型,则不需要调用这些函数,我可以直接选择和分组ts.由您决定如何表示数据取决于您.