php-MySQL GROUP BY并填充空行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php-MySQL GROUP BY并填充空行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1796字,纯文字阅读大概需要3分钟。
内容图文
![php-MySQL GROUP BY并填充空行](/upload/InfoBanner/zyjiaocheng/880/d542ba3c39704a6c954f70a06f270b65.jpg)
我敢肯定这已经得到回答,但是我找不到我需要的详细信息.
对于分析系统,我需要能够对行进行分组并按分钟,小时,天,月或年对行进行归还.我可以正常工作(下面的示例代码).
SELECT COUNT( DISTINCT user_id ) , `hour` , `timestamp`
FROM tracking_request
WHERE site_id = '3'
AND `timestamp` < '2011-08-31 04:05:45'
AND `timestamp` > '2011-08-29 22:00:00'
GROUP BY `hour` , `day` , `month` , `year`
ORDER BY `timestamp` ASC
问题是,像大多数图表一样,我需要填补数据不存在的空白(例如,最近3分钟没有行).我读过有关创建“日历表”并连接该数据的信息,但是我如何才能针对每个刻度有效地做到这一点(例如,一年会比分钟容易得多,因为一分钟需要表中有很多行)?如果有帮助,则表中的每个字段都有一列(如上所示,您可以看到“小时”,“天”等).
编辑:
我最终使用PHP通过使用一个空数组然后填充它来实现这一点.如果有人能想到一个全(或大部分)SQL解决方案,那就更好了.
解决方法:
在此答案中,我将概述如何生成日历表.
创建三个表,分别表示天,小时和分钟:
CREATE TABLE days (
day DATE,
PRIMARY KEY (day)
)
CREATE TABLE hours (
hour INT,
PRIMARY KEY (hour)
)
CREATE TABLE minutes (
minute INT,
PRIMARY KEY (minute)
)
用0到23的数字填充小时表,用0到59的数字填充分钟表.要填充天表,可以创建如下过程:
CREATE PROCEDURE make_days(IN start_date DATE, IN end_date DATE)
BEGIN
DECLARE curr_date DATE;
SET curr_date = start_date;
WHILE curr_date <= end_date DO
INSERT IGNORE INTO days(day) VALUES(curr_date);
SET curr_date = DATE_ADD(curr_date, INTERVAL 1 DAY);
END WHILE;
END
然后,您可以调用此过程来创建如下日期:
CALL make_days('2011-01-01','2012-12-31');
现在,您可以使用类似于以下内容的查询为给定时间间隔中的每一分钟创建值:
SELECT YEAR(day) AS year, MONTH(day) AS month, DAYOFMONTH(day) AS day, hour, minute
FROM days, hours, minutes
WHERE CAST(CONCAT(day,' ',hour,':',minute) AS DATETIME) BETWEEN '2011-08-31 22:00' AND '2011-09-01 10:00'
ORDER BY year, month, day, hour, minute
内容总结
以上是互联网集市为您收集整理的php-MySQL GROUP BY并填充空行全部内容,希望文章能够帮你解决php-MySQL GROUP BY并填充空行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。