首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL:如何做日常报告?

MySQL:如何做日常报告?
EN

Stack Overflow用户
提问于 2011-12-21 12:30:30
回答 1查看 6.7K关注 0票数 2

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

代码语言:javascript
运行
复制
===========================================
| Date                  | Total Sales     |
===========================================
| Thursday, Dec 1, 2011 | 100             |
-------------------------------------------
| Friday, Dec 2, 2011   | 200             |
-------------------------------------------
| Saturday, Dec 3, 2011 | 150             |
-------------------------------------------
... and so on ...

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-21 12:41:53

如何统计每天的记录数

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

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

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

代码语言:javascript
运行
复制
SELECT COUNT(*), DAY(ts), MONTH(ts), YEAR(ts) FROM tableName
       GROUP BY YEAR(ts), MONTH(ts), DAY(ts);

如何为个人生成日报表

好了,这才是你真正想要的。让我们画一个包含一些记录的示例表:

代码语言:javascript
运行
复制
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

要获取某个特定人员的每日总计,您可以执行以下操作:

代码语言:javascript
运行
复制
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进行选择和分组。如何表示您的数据由您决定。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8585093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档