MYSQL - datetime,group by,正确的查询

时间:2013-10-21 03:21:36

标签: mysql


UPDATE
我发现了这个问题:
    SELECT CONCAT(DATE(gid),'/',HOUR(gdate),':00:00 to',CONCAT(HOUR(gdate),':59:59'))作为切片,   计数(*) 来自t_table 通过...分组   DATE(gdate)   HOUR(gdate);

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


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

  
      
  • gid(int)
  •   
  • gdate(datetime)
  •   
  • ginfo(text)
  •   

我想找到两个日期之间每天每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个项目。

我找不到正确的查询 任何人都可以帮助我吗? 请原谅我可怜的英语。

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

试试这样。

SELECT COUNT(ginfo) 
FROM 'TABLE_NAME'
WHERE gdate BETWEEN 'from_date' AND 'to_date' 
GROUP BY (date(gdate) + INTERVAL 8 HOUR)

答案 2 :(得分: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 interval overlapping timestamp MySQL query

Group mysql query by 15 min intervals