首页 > 解决方案 > 按日期间隔大于 X 的 DATETIME 获取数据、计数和分组

问题描述

我有很多针对一次运行的特定 API 的会话。API 会不时更新,导致所有会话终止。

发生这种情况时,每个会话都会向我的中央网站报告错误“830”。

数据最终看起来像这样:

uid------error-------date
41       830         2018-05-14 13:45:13
42       830         2018-05-14 13:45:14
43       830         2018-05-14 13:45:16
44       830         2018-05-14 13:45:23
46       830         2018-05-14 13:46:19
50       830         2018-05-15 04:12:49
80       830         2018-05-15 04:12:49
36       830         2018-05-15 04:12:50
91       830         2018-05-15 04:15:52
12       830         2018-05-15 07:45:11
88       830         2018-05-15 07:45:11
92       830         2018-05-15 07:45:12

因为它可能随时发生,所以我需要能够通过下一位数据之间的间隙对这些数据进行分组。

例如,这是我想用上面的数据得到的输出并像这样输出(其中间隙> 10分钟):

update_date-----update_count
2018-05-14      1
2018-05-15      2

到目前为止,这是我尝试过的:

select
    count(eresult) as error_count,
    CAST(added AS DATE) as error_date
from st__errors
where 1=1
and eresult = 20
group by date(added)
order by id desc

结果:

在此处输入图像描述

这对所有数据进行分组和计数,但不考虑差距和按日期差距分组,这是我卡住的地方。

我需要每天按每个错误日期之间的间隔对数据进行分组。我在解释自己真的很糟糕,但希望这些例子能更好地描述我想要实现的目标?

标签: sqlmariadb

解决方案


这将是一个非常慢的查询,但它是一个选项:

select    count(e.eresult) as error_count,
          CAST(e.added AS DATE) as error_date
from      st__errors as e
where (
       SELECT  TIME_TO_SEC(TIMEDIFF(e.added, ei.added)) 
       FROM    st__errors as ei WHERE ei.id = e.id - 1
      ) > 10
      and e.eresult = 20
group by date(e.added)
order by e.id desc

推荐阅读