我有一个存储用户和机器人(基本上是状态机)之间所有消息的表,我试图从这个表中找到所有消息/响应对,以计算每个用户的平均响应时间。需要注意的是,并非所有传出消息都会得到响应。
每行存储 message_id、user_id、created_at(时间戳)、state_code 和传出(布尔值)。
我一直在研究窗口函数,目的是使用延迟和引导来找到相关的消息对,然后计算它们的 created_at 值之间的差异,每个用户的平均值会给我们每个用户的平均值。响应时间。问题在于我无法确保两条消息都使用相同的 sate_code 发出。想法?
更新:如果用户的状态代码相同,您可以确保用户的消息是对给定传出消息的响应。所以,例如
╔════════════╦═════════╦════════════╦════════════╦══════════╗
║ message_id ║ user_id ║ created_at ║ state_code ║ outgoing ║
╠════════════╬═════════╬════════════╬════════════╬══════════╣
║ 1 ║ 11 ║ mm/dd/yy ║ 20 ║ t ║
║ 2 ║ 11 ║ mm/dd/yy ║ 20 ║ f ║
║ 3 ║ 11 ║ mm/dd/yy ║ 22 ║ t ║
║ 4 ║ 11 ║ mm/dd/yy ║ 21 ║ t ║
║ 5 ║ 12 ║ mm/dd/yy ║ 45 ║ t ║
║ 6 ║ 12 ║ mm/dd/yy ║ 46 ║ f ║
║ 7 ║ 12 ║ mm/dd/yy ║ 46 ║ t ║
║ 8 ║ 12 ║ mm/dd/yy ║ 20 ║ f ║
║ 9 ║ 12 ║ mm/dd/yy ║ 43 ║ t ║
║ 10 ║ 13 ║ mm/dd/yy ║ 20 ║ t ║
╚════════════╩═════════╩════════════╩════════════╩══════════╝
在这种情况下,这对是消息 1 和 2,以及消息 6 和 7。然而,只有消息 1 和 2 很重要,因为用户 1 从状态 20 响应我们在状态 20 中收到的传出消息之一。