【问题标题】:Mysql Group By 24 hour intervalsMysql Group By 24 小时间隔
【发布时间】:2014-01-03 18:06:48
【问题描述】:

如何按时间间隔对表 Test 的记录进行分组,从每天 19:00 开始,到第二天 18:59 结束?

表:测试

id  creation_date   name
1   2014-01-01      17:52:27    a
2   2014-01-01      18:50:00    b
3   2014-01-01      19:00:00    c
4   2014-01-03      18:59:00    e
5   2014-01-03      12:00:00    f

想要的结果是:

Interval                                    Number of Occurrences
2013-31-31 19:00:00 - 2014-01-01 18:59:59   2
2014-01-01 19:00:00 - 2014-01-02 18:59:59   1
2014-01-02 19:00:00 - 2014-01-03 18:59:59   1
2014-01-03 19:00:00 - 2014-01-04 18:59:59   1

【问题讨论】:

  • 标题表示 12 小时间隔,但文字表示 24 小时间隔?
  • 已编辑。感谢数字克里斯。

标签: mysql group-by


【解决方案1】:

试试这个:

SELECT MIN(creation_date), MAX(creation_date), COUNT(*) AS Occurrences 
FROM test
GROUP BY DATE(DATE_SUB(creation_date, INTERVAL 19 HOUR))

工作演示:http://sqlfiddle.com/#!2/aa7583/6

对于格式化部分,使用这个:

SELECT CONCAT( CONCAT(DATE(DATE_SUB(creation_date, INTERVAL 19 HOUR)),' 19:00:00') , ' - ' , CONCAT(DATE(DATE_ADD(creation_date, INTERVAL 5 HOUR)), ' 18:59:00') ) AS Interval, COUNT(*) AS Occurrences 
FROM test
GROUP BY DATE(DATE_SUB(creation_date, INTERVAL 19 HOUR))

【讨论】:

  • 感谢您的关注。您的查询未返回所需的结果。这个想法不是将 19H 减去每个日期时间(因为它们可以 bt 13:13、23:13、13:00 等),而是将每条记录拟合到从当天 19:00 开始到结束的时间间隔次日18:59。
  • @user1391581 我认为查询按预期工作,请查看工作查询:sqlfiddle.com/#!2/aa7583/6 我已使用您提供的示例数据。让我知道该 sqlfiddle(链接)上显示的输出有什么问题。
  • 我看过了。预期的出现次数为 2、1、1、1。不是:2、1、2。
  • @user1391581 根据您的样本数据,最后 2 行(ID 4 和 5)都位于 2014-01-02 19:00:00 - 2014-01-03 18:59:59 的相同间隔内,因为最后一行的时间为 12:00:00,在 18 点之前: 59:00。所以 2、1、2 是正确的。
  • 对不起,你是对的。我的意思是 2014-01-04 12:00:00 on id = 5。非常感谢。 +1!
【解决方案2】:

怎么样:

 select count( distinct( q0.made_date )) from
 (
     select (date_sub( cast( concat( creation_date, " ", name ) as datetime )), -19, HOUR ) as made_date ) 
 ) as q0

(还没有尝试过这个,但想法是将日期标准化为午夜,然后按日期分组)

【讨论】:

  • 感谢您的关注。您的查询未返回所需的结果。这个想法不是将 19H 减去每个日期时间(因为它们可以 bt 13:13、23:13、13:00 等),而是将每条记录拟合到从当天 19:00 开始到结束的时间间隔次日18:59。
  • 是的,但这不是所需查询的目的:\
猜你喜欢
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
相关资源
最近更新 更多