php - MySQL:如何做日报?

标签 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 ...

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

最佳答案

如何统计每天的记录数

这就是我最初认为您想要的。我把它留在这里是因为它可能对其他人有用。

你有一堆时间戳。您想要按天对它们进行分组并获取每天的记录数。

假设您的时间戳字段名为 ts,您可以这样做:

SELECT COUNT(*), DAY(ts), MONTH(ts), YEAR(ts) FROM tableName
       GROUP BY YEAR(ts), MONTH(ts), DAY(ts);

如何为个人生成每日报告

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

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

要获取特定人员的每日总计,您可以:

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

这是选择 person 为 John 的记录,按唯一日期分组,并对这些记录的 sales 值求和。如果您想要合并每个人的报告,只需删除 WHERE 子句即可。

最后的说明

如果您使用DATE 类型而不是DATETIME 类型,您可以稍微简化您的SQL。我正在按日、月和年进行选择和分组,我需要使用三个独立的函数。如果您使用的是 DATE 类型,则不需要调用这些函数,我可以直接按 ts 选择和分组。这取决于您希望如何表示您的数据。

关于php - MySQL:如何做日报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8585093/

相关文章:

需要反向的 PHP Pow 函数

php - 我有文本框的数组变量,如何正确使用 $_POST?

sql - mysql 中的排名

sql - 将嵌套的 sql where-in 模式转换为连接

phpcassa连接池

php - 连接表并显示结果 [Laravel 5]

java - MySql 中的多个更新语句

php - Lumen 5.6 迁移错误指定的 key 太长最大 key 长度为 767 字节

php - 特定时间自动从数据库中删除行

php - 如何在 PHP 中使用正则表达式匹配嵌套的大括号?