尝试在具有datetime列(abc_datetime)的表上执行简单的select count()。但是,我想为datetime值比任何其他行的datetime值至少晚15分钟的那些行返回count()。我的想法是,我想忽略第一行后15分钟内具有datetime值的所有后续行。
表测试 + --------------------- + | abc_datetime | + --------------------- + | 2014-07-21 00:49:52 | | 2014-07-21 01:49:50 | | 2014-07-21 02:49:45 | | 2014-07-21 03:49:39 | | 2014-07-21 04:49:38 | | 2014-07-21 05:49:32 | | 2014-07-21 06:49:24 | | 2014-07-21 07:49:20 | | 2014-07-21 08:49:14 | | 2014-07-21 09:00:16 | | 2014-07-21 09:00:25 | | 2014-07-21 09:50:55 | | 2014-07-21 09:51:03 | | 2014-07-21 09:51:33 | | 2014-07-21 09:51:46 | | 2014-07-21 10:51:36 | | 2014-07-21 11:51:30 | | 2014-07-21 12:51:22 | | 2014-07-21 13:51:12 | | 2014-07-21 14:51:05 | | 2014-07-21 15:50:55 | + --------------------- + 设置21行(0.01秒)想要返回18的计数,因为从09:00:25和09:51:XX开始的日期时间记录将被忽略,因为它们位于上一行datetime值的15分钟之内。
我将为此使用相关子查询:
select count(*)
from (select t.*,
(select t2.abc_datetime
from test t2
where t2.abc_datetime < t.abc_datetime
order by t2.abc_datetime
limit 1
) as prev_dt
from test t
) t
where prev_dt is null or prev_dt < abc_datetime - interval 15 minute;
您也可以使用not exists
:
select count(*)
from test t
where not exists (select 1
from test t2
where t2.abc_datetime < t.abc_datetime and
t2.abc_datetime >= t.abc_datetime - interval 15 minute
);
我更喜欢这个版本,只是为了获得计数。第一个版本更适合实际查看值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句