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

Posted

技术标签:

【中文标题】一年内每天如何只使用一次查询获取数据?【英文标题】:How to use only one query to get the data every day within one year? 【发布时间】:2011-01-24 22:08:42 【问题描述】:

我想在一年内每天获取数据,但我必须每天使用 365 次查询,例如:

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

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

【问题讨论】:

【参考方案1】:

假设您创建的列是 DATETIME 或 TIMESTAMP,并且存储的数据比一天更细:

SELECT COUNT(*) ... GROUP BY YEAR(created), MONTH(created), DAY(created)

COUNT 是一个聚合函数,将应用于每个组,即每个组将有一行,该行将包含该组中的记录数。由于我们每天做了一个小组,这就是您想要的数据。

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

您可能希望创建 WHERE > $start AND created

参考资料:

mysql Query GROUP BY day / month / year

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

【讨论】:

【参考方案2】:

您可以使用 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)

select count(*), created from my_table group by created

【讨论】:

【参考方案3】:

如果它已经是日期时间列:

SELECT COUNT(*),DATE(created) as d ..... GROUP BY d;

如果存储为 unix 时间戳

SELECT COUNT(*),DATE(FROM_UNIXTIME(created)) as d ..... GROUP BY d;

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

【讨论】:

以上是关于一年内每天如何只使用一次查询获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

Hangfire 每 15 秒获取一次数据库

如何在 React hooks 和 redux 中只获取一次且不再获取数据

ReactJS:如何只调用一次 useEffect 挂钩来获取 API 数据

Rails 5 调度程序每天更新一次数据库

如何从核心数据中的实体中获取所有项目的列表,每个项目只出现一次?

获取联系人在一分钟内有 20 个活动的行 - SQL 查询 [重复]