我需要按 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 小时进行一次选择
谢谢
使用以下 SQL 查询:
SELECT *, TIMESTAMPADD(HOUR, 12, DATE(TIMESTAMPADD(HOUR, -12, created))) AS grp
FROM table
ORDER BY created DESC
这会将最近添加的用户放在首位。如果您希望最老的用户位于顶部,您可以更改DESC
为。ASC
另外,我添加的是一grp
列。它将帮助您在 PHP 中使用分组。该列的结果是 fe August, 24 2013 12:00:00+0000
。每当这个值改变时,你需要在 PHP 中创建一个新的组头。
现在,我可以为您提供一些代码,但这取决于您使用的数据库访问类型(mysqli_* -functions或PDO),因此我不会对此进行详细介绍。
我可以为您提供一个链接,其中包含有关使用 while 循环对记录进行分组的更多信息,该链接已作为对 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。