只计算彼此间隔30分钟的行?

时间:2013-08-24 03:53:51

标签: php mysql

我正在尝试考虑计算MySQL表中特定行的最有效方法。

我的表格中包含一个名为datetime的{​​{1}}列,我想计算每个date_time之间至少有30分钟的行数。

例如,假设我有下表:

date_time

如果我只想在最后一个条目后至少有30分钟时加入一个条目,那么计数将包括id#1和id#4,因此计数将为2。

我正在努力想出一个干净的脚本来执行此操作,是否有任何特殊类型的查询可以帮助我完成此任务?

3 个答案:

答案 0 :(得分:2)

您可以使用MySQL变量( SQLFiddle ):

SET @x := NULL;
SELECT count(*) FROM (
    SELECT @x AS prev, @x:=date_time AS curr
    FROM mytable
    ORDER BY id
) y
WHERE curr > prev + interval 30 minute
   OR curr < prev

答案 1 :(得分:2)

非常简单的解决方案是使用DATE_FORMAT MySQL函数。

http://sqlfiddle.com/#!2/3b793/4

<强>查询

SELECT
  DATE_FORMAT(`datef`, '%i') AS `Fields`,
  `datef`
FROM `dates`
WHERE DATE_FORMAT(`datef`, '%i') = 30

答案 2 :(得分:1)

这应该有效。假设该表名为“time_list”,并且id和时间是顺序的......

SELECT
  count(1)
FROM `time_list`
  LEFT OUTER JOIN `time_list` AS `a`
    ON (`time_list`.`id` = (`a`.`id` + 1))
WHERE (
  (to_seconds(`time_list`.`date_time`) - to_seconds(`a`.`date_time`)) / 60 >= 30
  OR `a`.`id` IS null);