【问题标题】:how to retrieve records from mysql which are inserted in 30mins interval?如何从 mysql 中检索以 30 分钟间隔插入的记录?
【发布时间】:2014-08-14 13:37:31
【问题描述】:

我有一个数数的要求。每半小时插入到表中的记录数。如果有 5 条记录,则从 11 到 11 30,如果有 4 条记录,则从 11 30 到 12 如何找到编号。记录数

【问题讨论】:

  • 取决于你的数据是什么样的
  • 显然这里没有足够的信息来提供帮助。但也许如果您的表中有一个列定义了插入数据的时间,您可以通过两次之间的存储过程选择数据..?

标签: mysql phpmyadmin


【解决方案1】:

您需要插入每一行的日期时间;如果那是表中的一列,那是最简单的。 (我们在这里假设该列名为inserted_dt。)

我们真正需要的只是一个对inserted_dt 进行运算的表达式,以便在给定的半小时内为每个值返回一个值。

如果我们需要“小时”间隔,而不是“半小时”间隔,那就很容易了:

    DATE_FORMAT(t.inserted_dt,'%Y-%m-%d %H:00:00')

让我们将第一个“半小时”范围定义为分钟 >= '00' AND 分钟

要从inserted_dt 列中取出“分钟”,我们可以使用其中的任何一个

    EXTRACT(MINUTE FROM t.inserted_dt)

    DATE_FORMAT(t.inserted_dt,'%i')

我们可以使用条件测试来判断分钟值是否小于30,或者翻转过来测试是否大于等于30:

    DATE_FORMAT(t.inserted_dt,'%i')+0 >= 30

我们可以通过添加 0 或 30 分钟的间隔将其与“年-月-日-小时”重新组合在一起,

    DATE_FORMAT(t.inserted_dt,'%Y-%m-%d %H:00:00') 
      + INTERVAL 30*(DATE_FORMAT(t.inserted_dt,'%i')+0>=30) MINUTE

(我们可以使用很多表达式来做类似的事情;这只是我们可以用来返回 DATETIME 数据类型的最短表达式之一

现在,我们只需将表达式添加到查询的 SELECT 列表中,我们就会得到一个标识“半小时”的值。

要获得每半小时范围的“计数”,只需简单的 COUNT() 聚合和 GROUP BY。 “诀窍”是我们在GROUP BY 子句中使用了新的“半小时”表达式。

SELECT DATE_FORMAT(t.inserted_dt,'%Y-%m-%d %H:00:00')
         + INTERVAL 30*(DATE_FORMAT(t.inserted_dt,'%i')+0>=30) MINUTE AS halfhour
     , COUNT(*)
  FROM mytable t
 GROUP BY halfhour

显然,如果您只想返回指定日期时间范围的结果,请添加 WHERE 子句,

SELECT DATE_FORMAT(t.inserted_dt,'%Y-%m-%d %H:00:00')
         + INTERVAL 30*(DATE_FORMAT(t.inserted_dt,'%i')+0>=30) MINUTE AS halfhour
     , COUNT(*)
  FROM mytable t
 WHERE t.inserted_dt >= '2014-08-12'
   AND t.inserted_dt <  '2014-08-12' + INTERVAL 1 DAY
 GROUP BY halfhour

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多