1

更新
我发现这个查询:
SELECT CONCAT(DATE(gid), ' / ', HOUR(gdate), ':00:00 to ', CONCAT(HOUR(gdate), ':59:59')) as slice, COUNT (*) FROM t_table GROUP BY DATE(gdate), HOUR(gdate);

当 8 小时或一天没有数据时,它不输出零。有办法吗?


我有一个包含 3 个字段的表:

  • gid(整数)
  • gdate(日期时间)
  • ginfo(文本)

我想找到正确的查询,该查询将在两个日期之间每天每 8 小时输出项目数(字段 ginfo)。我不确定它是否清楚,所以我可以尝试对其进行模式化:

第一个日期是:2013/10/01。
第二个日期是:2013/10/03。
例如,第一天的 PHP 输出为:
2013/10/01 00:00-07h59 : 8
2013/10/01 08:00-15h59 : 5
2013/10/01 16:00-23h59 : 7
对于第二天,PHP 输出将是例如:
2013/10/01 00:00-07h59:2
2013/10/01 08:00-15h59:3
2013/10/01 16:00-23h59:1
等。

表中,2013/10/01 有 20 项。表中 2013/10/02 有 6 项。

我找不到正确的查询。
谁能帮我 ?
原谅我糟糕的英语。

4

3 回答 3

0

你可以试试这样的

SELECT ROUND(UNIX_TIMESTAMP(`gdate`)/(480 * 60)) AS timekey,count(*),`gdate`
FROM your_table
WHERE gdate BETWEEN '2013-10-01' AND '2013-10-03' 
GROUP BY timekey

详细答案可以参考以下

GROUP BY 间隔重叠时间戳 MySQL 查询

按 15 分钟间隔对 mysql 查询进行分组

于 2013-10-21T04:36:23.427 回答
0

你可以这样使用:

SELECT COUNT(gid) FROM [table_name] WHERE (gdate>=2013/10/01 00:00) and (gdate<=2013/10/01 07:00)
UNION ALL 
SELECT COUNT(gid) FROM [table_name] WHERE (gdate>=2013/10/07 00:00) and (gdate<=2013/10/01 16:00)
UNION ALL
... bla bla with your conditions

我认为格式日期不正确,您可以查找格式日期。

于 2013-10-21T04:06:27.980 回答
0

像这样试试。

SELECT COUNT(ginfo) 
FROM 'TABLE_NAME'
WHERE gdate BETWEEN 'from_date' AND 'to_date' 
GROUP BY (date(gdate) + INTERVAL 8 HOUR)
于 2013-10-21T04:08:37.493 回答