当前位置: 首页 > 面试题库 >

两个事件之间的时间

郝承悦
2023-03-14
问题内容

是否有一个跟踪用户某些事件的表。

 id | user_id | action |         created_at         
----+---------+--------+----------------------------
  5 |       1 | create | 2016-09-08 11:29:56.325691
  6 |       1 | clear  | 2016-09-08 11:30:00.08604
  7 |       2 | create | 2016-09-08 11:30:10.12857
  8 |       2 | clear  | 2016-09-08 11:30:14.238685
  9 |       3 | create | 2016-09-08 11:30:42.192843

总是有一个create动作,之后可能会有一个clear动作。

CREATE TYPE user_actions AS ENUM ('create', 'clear');

现在,我想查询这两个动作之间的时间差,以获取用户create和之间的time_diff clear

现在,您可以假定user没有多个条目(例如,至少一个create,最大另一个clear)。

我想要这样的结果:

 user_id |    time_diff    
---------+-----------------
       1 | 00:00:03.760349
       2 | 00:00:04.110115

问题答案:

您可以使用以下查询:

SELECT user_id,
       MAX(CASE WHEN action = 'clear' THEN created_at END) -
       MAX(CASE WHEN action = 'create' THEN created_at END) AS time_diff 
FROM mytable
GROUP BY user_id 
HAVING COUNT(*) = 2

HAVING子句过滤掉user_id仅包含一个create动作的组,例如id=9OP中的with记录。

演示在这里



 类似资料:
  • 我有一些能量计,将继续产生计数器值,这是一个累积指标。即不断增加,直到计数器复位。 有一个实时ETL作业,它在事件时间的两个连续值之间进行减法。 例如。 此外,有时事件可能没有按顺序接收。 如何使用Apache Flink流式API实现?最好使用Java中的示例。

  • 问题内容: 我有一条流经多个系统的消息,每个系统都会记录消息的进入和退出以及时间戳和uuid messageId。我通过以下方式提取所有日志: 结果,我现在有以下事件: 我想生成一个报告(最好是堆积的条或列),用于每个系统的时间: 做这个的最好方式是什么?Logstash过滤器?kibana计算字段? 问题答案: 您只能使用Logstash 过滤器来实现此目的,但是,您必须实质性地重新实现该过滤器

  • 问题内容: 我需要计算两个日期之间经过的时间。 这里要注意的是,我需要像YouTube一样用视频评论时间戳来显示它。也就是说,仅以最大的方式显示它。 例如, 如果时间是50秒前,应该说是50秒前。 如果时间超过一分钟,则应说一分钟前/十分钟前,等等。 如果时差是1小时30分钟,则应显示:一个小时前。 如果时间是一个半星期而不是一个星期前应该说的话。 如果时间超过一个月,则应说一个月前/两个月前,等

  • 我有两个位置的谷歌api链接 http://maps.googleapis.com/maps/api/directions/json? 我从两个位置得到响应(距离

  • 问题内容: 我在一个MySQL数据库表上工作,该表的列包含我对其他主机执行ping操作时的时间戳记(例如2014-09-16 09:08:05)。我的问题是如何在几分钟内计算出针对特定主机的第一次ping和最后一次ping之间的差异?另外,如何为上述差异的开始和结束指定不同的时间戳(而不是第一次和最后一次ping)。这是表格的示例: 我希望我已经对自己的解释足够清楚。 问题答案: 您可以使用本机的

  • 问题内容: ‘Go’的新手。问题可能是最基本的问题。 我有两个time.Time对象,我想获得小时/分钟/秒这两者之间的差异。可以说: 在上述情况下,由于差为0。应该给我00:00:00。考虑另一种情况: 在这种情况下,差异将为00:05:41。我看了看https://godoc.org/time,但什么都做不了。 问题答案: 您可以用来获取2个值之间的差,结果将是的值。 打印时,格式本身会“智能