如何从30分钟间隔插入的mysql中检索记录?

时间:2014-08-14 13:37:31

标签: mysql phpmyadmin

我要求计算号码。每半小时插入一张表的记录。如果有5条记录,则从11到11 30记录,如果有4条记录,则记录如何找到11号记录。记录

1 个答案:

答案 0 :(得分:0)

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

我们真正需要的是一个表达式,它在inserted_dt上运行,为给定的半小时内的每个值返回一个值。

如果我们需要"小时"间隔,而不是"半小时"间隔,这将非常容易:

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

让我们定义第一个"半小时"范围为分钟> =' 00'和分钟< ' 30'

获得"分钟"在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分钟的间隔将其与“#year; year-month-day-hour"”重新组合起来,

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

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

现在,我们只是将表达式添加到查询的SELECT列表中,我们得到一个标识" halfhour"的值。

获得"计数"对于每个半小时范围,这只是一个简单的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