【问题标题】:MySql 24 hours intervals selectMySql 24 小时间隔选择
【发布时间】:2013-08-27 11:21:36
【问题描述】:

我需要按 24 小时间隔对表格中的行进行分组,如下所示

// SELECT count(user_id), DATE(created) as day FROM table GROUP BY day //

SELECT * FROM table GROUP BY DATE(created)

但我需要从 12:00:00 而不是 00:00:00 开始每隔 24 小时进行一次选择

谢谢

【问题讨论】:

  • 你只需要日期吗?
  • 我需要从 12:00:00 开始按 24 小时间隔列出表格行组
  • 你想应用什么聚合函数?如果要显示所有记录,则应以编程方式进行分组...
  • SELECT * FROM table GROUP BY DATE(created) 是我现在使用的查询
  • 仅当您要对表中的数据使用聚合函数(SUM、MAX、AVG ...)时,使用 SQL GROUP BY 才有用。我假设每次到达一个新的“组”时,您只想在结果表中添加某种新的“标题”?这必须在您格式化输出时完成。 是否要输入日期并选择从当天 12:00:00 到第二天 12:00:00 创建的每一行?

标签: mysql select intervals


【解决方案1】:

使用以下 SQL 查询:

SELECT *, TIMESTAMPADD(HOUR, 12, DATE(TIMESTAMPADD(HOUR, -12, created))) AS grp
FROM table
ORDER BY created DESC

这会将最近添加的用户放在首位。如果您希望最老的用户位于顶部,您可以将 DESC 更改为 ASC

另外,我添加的是grp 列。它将帮助您在 PHP 中使用分组。 该列的结果是 f.e. August, 24 2013 12:00:00+0000。每当这个值改变时,你需要在 PHP 中创建一个新的组头。

现在,我可以为您提供一些代码,但这取决于您使用的数据库访问类型(mysqli_*-functions 或 PDO),所以我不会详细介绍。

我可以为您提供一个链接,其中包含有关grouping records using a while loop 的更多信息,该链接已作为对 SO 上另一个问题的答案提供。

编辑

要仅显示用户数量(以及时间范围的开始),您可以使用不同的方法:

SELECT COUNT(id), TIMESTAMPADD(HOUR, 12, DATE(TIMESTAMPADD(HOUR, -12, created))) AS grp
FROM table
GROUP BY grp
ORDER BY created DESC;

要查看实际查询,请查看SQL-Fiddle

【讨论】:

  • SELECT COUNT( id ) , DATE( created ) AS DAY FROM users GROUP BY DAY 这计算每天创建用户的 id。但是分组从 00:00:00 开始,我需要创建的分组从 12:00:00 开始,这样我就可以计算每 24 小时间隔创建的用户数。我问的有道理吗?
  • @MariusMarus 哦,你只想数数。你为什么不这么说? - 检查编辑!
  • 原谅我的英语不好:)
  • 1 2013-06-25 16:06:53 2013-06-25 12:00:00 6 2013-06-26 11:29:04 2013-06-25 12:00:00坚如磐石,我必须潜入TIMESTAMPADD。很棒的选择,谢谢
  • 我只想添加这个。该表是 innodb,向创建的列添加索引将优化此查询
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-14
相关资源
最近更新 更多