我正在尝试考虑计算MySQL表中特定行的最有效方法。
我的表格中包含一个名为datetime
的{{1}}列,我想计算每个date_time
之间至少有30分钟的行数。
例如,假设我有下表:
date_time
如果我只想在最后一个条目后至少有30分钟时加入一个条目,那么计数将包括id#1和id#4,因此计数将为2。
我正在努力想出一个干净的脚本来执行此操作,是否有任何特殊类型的查询可以帮助我完成此任务?
答案 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);