尝试在具有日期时间列(abc_datetime)的表上执行简单的选择计数()。但是,我想为那些日期时间值比任何其他行的日期时间值晚至少15分钟的行返回一个计数()。我的想法是,我想忽略任何后续行,其日期时间值在第一行的15分钟内。
Table Test +---------------------+ | 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 rows in set (0.01 sec)想要从09:00:25和09:51返回计数18作为日期时间记录:计数中将忽略XX,因为它们在前一行的日期时间值的15分钟内。
答案 0 :(得分:0)
我会使用相关的子查询:
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
);
我更喜欢这个版本以获得计数。第一个版本更适合实际查看值。