首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在一年内每天只使用一次查询来获取数据?

如何在一年内每天只使用一次查询来获取数据?
EN

Stack Overflow用户
提问于 2010-03-08 18:06:57
回答 3查看 1.4K关注 0票数 5

我希望在一年内获得每天的数据,但我每天都必须使用365个查询,如下所示:

代码语言:javascript
复制
for ($i = 0; $i<365; $i++){
    $end_day = ...; // the end time of each day
    $start_day = ...; // the start time of each day
    $query = select count(*)....where created < $end_day AND created > $start_day
}

我认为我目前的解决方案使系统变得非常慢。有没有办法只使用一个查询?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-08 18:15:00

假设您创建的列是日期时间或时间戳,并且存储的数据比一天更细粒度:

选择计数(*) ...按年(创建)、月(创建)、日(创建)分组

COUNT是一个聚合函数,将应用于每个组,即每个组有一行,该行具有该组中的记录数。因为我们一天创建了一个组,这就是你想要的数据。

您不能只按天分组(创建),因为DAY返回月份的第几天,因此我们还需要放入月和年,以确保日期是离散的。

您可能希望有一个WHERE created > $start和created < $finish以将其限制在某个时间范围内(或WHERE年份(Created) == 2010)。

参考文献:

MySQL Query GROUP BY day / month / year

http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html

票数 4
EN

Stack Overflow用户

发布于 2010-03-08 18:10:37

您可以使用group by子句。http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html

如果日期中有时间,则必须将其格式化为仅获取日期(http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format)

代码语言:javascript
复制
select count(*), created from my_table group by created
票数 3
EN

Stack Overflow用户

发布于 2010-03-08 18:11:17

如果它已经是datetime列:

代码语言:javascript
复制
SELECT COUNT(*),DATE(created) as d ..... GROUP BY d;

如果它被存储为unix时间戳:

代码语言:javascript
复制
SELECT COUNT(*),DATE(FROM_UNIXTIME(created)) as d ..... GROUP BY d;

基本上,您可以使用Mysql Date and Time functions格式化该列,以便只从中获得一个日期,然后根据这些日期进行分组,以获得每个日期的计数。

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

https://stackoverflow.com/questions/2400493

复制
相关文章

相似问题

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