mysql选择具有时间间隔的记录计数

时间:2014-07-21 23:56:06

标签: mysql

尝试在具有日期时间列(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分钟内。

1 个答案:

答案 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
                 );

我更喜欢这个版本以获得计数。第一个版本更适合实际查看值。