【问题标题】:MYSQL - datetime, group by, correct queryMYSQL - 日期时间,分组依据,正确查询
【发布时间】:2013-10-21 03:21:35
【问题描述】:

更新
我找到了这个查询:
SELECT CONCAT(DATE(gid), ' / ', HOUR(gdate), ':00:00 to ', CONCAT(HOUR(gdate), ':59:59')) 作为切片, 数数(*) 从 t_table 通过...分组 日期(gdate), 小时(gdate);

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


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

  • gid (int)
  • 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 项。

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

【问题讨论】:

  • 如果该时间段没有行,应该有一行为零,还是没有行行?
  • 你能给我们sqlfiddle吗?
  • 最好找零。如果查询格式正确,它将避免花一些时间使用 PHP 脚本 :=)
  • sqlfiddle 用于创建表?该表非常简单(如上所述只有 3 个字段)。对于查询,我发现了类似的内容:stackoverflow.com/questions/15708027/…。但是没有零,它是按小时完成的。我需要 8 小时的间隔。
  • 见下一篇文章。我给了你 2 个 sqlfiddle。

标签: mysql


【解决方案1】:

你可以试试这样的

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

【讨论】:

  • 感谢您的回答。输出对我来说很奇怪。我不知道timekey的概念。我会检查网址。实际上,它并没有输出我真正想要的。
【解决方案2】:

像这样试试。

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

【讨论】:

  • 感谢您的回答。这与我正在寻找的东西非常接近,但还有两件小事。 1-我想在输出中看到句号(只有计数)。 2-如果没有价值,会有零吗? (参见波西米亚答案)。谢谢
  • 我检查得很好,有一个问题,因为我有一天从 00h00 到 23h59 的条目,并且在输出中那天只有一行。间隔不起作用?
  • 你能在 sqlfiddle 中给出案例吗?
  • sqlfiddle.com/#!2/07486/3。在这种情况下,当特定时间间隔内没有数据时,我没有零
  • sqlfiddle.com/#!2/018ab/1。在这种情况下,我的输出中没有“8 小时间隔”。这是按天分组的。
【解决方案3】:

你可以这样使用:

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

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

【讨论】:

  • 感谢您的回答。我尝试了查询,但它显示了类似的内容: COUNT(gid) / 507 / 507
猜你喜欢
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 2011-07-01
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多